Как научится четко понимать где модульное тестирование, а где функциональное?
Здравствуйте! Разбираюсь с тестированием и периодически не могу понять, где использовать модульное, а где функциональное. Например, проверить какое значение возвращает функция - это функциональное тестирование, сделать POST или GET запрос и проверить результат - это уже модульное тестирование. С этим вроде все четко ясно. А вот, например, тестирование моделей в laravel это какой вид тестирования? А если идет тестирование отношений модели? В общем как научится четко понимать, где какое тестирование использовать? Помогите пожалуйста.
sim3x, например, scope или проверить результат возвращаемый связью $post->comments и $post->comments(). $post это модель с какой-то публикацией, а comments отношение с комментариями.
sim3x, А если для связи не верно указаны поля или в самом методе связи используется условие where разве не нужно это тестировать? Ведь это тоже может работать не верно?
sim3x, Ну вот, например, в модели есть отношение comments
public function comments()
{
return $this->hasMany('App\Comment', 'relationship_id', 'other_name_filed_id');
}
Именование полей идет не стандартное и фреймворк сам понять их не сможет, поэтому придется явно их указывать, хоть такое встречается редко, но все же....
Или на нескольких совершенно разных страницах нам нужно получить только комментарии с каким-то условием, для этого удобней сделать метод с условиями в самой модели, чем в каждом контроллере их указывать.
public function system_comments()
{
return $this->hasMany('App\Comment')->where('type', 'system');
}
Или есть такой scope, разве его не нужно тестировать?
public function scopeOfType($query, $type)
{
return $query->where('type', $type);
}
подразумевает, что вам не нужно проверять, действительно ли орм вставило такой запрос, как требуется. Или правильно ли произошло наследование внутри фреймворка
Я - апологет тдд
tdd
Те в вашем случае
Вам нужно написать тест получения страницы, на которой будет все что вам требуется и итеративно добавляя юнит-тесты писать функционал
Функции - это манипуляции с данными: есть данные на вход, и есть возвращаемое значение.
Модули - это уже логика, которая зависит не столько от данных, сколько от условий/параметров.
Когда проводим функциональные тесты - тогда проверяем правильно ли функция работает с данными. Когда проводим модульное тестирование, тогда проверяем правильно ли обрабатываются условия/параметры (какие данные при этом не так важно).
Функциональные тесты относятся к системе в целом и проверяют выполнение бизнес-функций системы. Система обычно состоит из нескольких модулей. Модульные тесты применяются к модулям. Также модульность - многоплановое понятие. Может быть модуль (unit) "класс", а может быть модуль "сервис". Главное то, что модуль - это техническое понятие (пользователю все равно как вы там внутри на модули все разложили), а функции системы всегда имеют бизнес смысл.
Мне кажется ты смешиваешь мух и котлеты в блендере.
ВВОДНАЯ
Функциональное тестирование это вид тестирования. Всего их два: функциональное и нефункциональное. Функциональное тестирование проверяет функционал продукта - ЧТО он делает. Нефункциональное проверяет характеристики функционала - КАК он это делает (пример: скорость загрузки сайта).
Компонентное тестирование это уровень тестирования. Всего их 4: приемка, системное, интеграционное, модульное. Различаются они (!не запоминать - очень кратко!) глубиной проверки системы. Модульное тестирование это насколько возможно подробное тестирование одного компонента (изолированно).
ОБОСНОВАНИЕ
Глоссарий ISTQB
component: A minimal software item that can be tested in isolation.
component testing ("unit testing" and "module testing" are synonyms of CT): The testing of individual software components. [After IEEE 610]