У меня есть большая программа, для которой мне нужно написать тесты. Мне интересно, было бы неправильно писать тесты, которые выполняются в определенном порядке, поскольку некоторые из них обязательно должны выполняться по порядку и зависят от предыдущего теста.Является ли модульное тестирование в заказе невосприимчивым?
Например сценарий вроде следующего:
- CreateEmployer
- CreateEmployee (требует работодатель)
- Добавить департаменту
Недостаток я вижу в этот подход что если один тест не удастся, все последующие тесты также потерпят неудачу. Но в любом случае мне придется писать код для создания базы данных, поэтому может быть более эффективным подходом к использованию кода, который создает базу данных mock как своего рода интегральный тест, подобный интеграции.
Должен ли я создать базу данных без использования тестов в качестве метода семени, а затем снова запустить каждый из методов, чтобы увидеть результат? Проблема, которую я вижу при таком подходе, заключается в том, что если метод семян не работает, все тесты потерпят неудачу, и сразу не станет ясно, что ошибка заключается в методе семян, а не в самих сервисах или самих тестах.
Имеет смысл. Я предполагаю, что то, что я описываю, будет скорее интеграционным тестом. Дайте этим модульным тестам не тестировать взаимодействие с базой данных и только логику, я могу думать о нескольких местах, где мне действительно нужны тесты. Кажется расточительным для проверки того, что по существу является функцией setter'a. Department = foo'. Я бы сказал, что около 2% моего кода имеет логику, которая не является тривиальной. –
@ RaySülzer: Ну, вы не будете * напрямую * тестируете простые сеттеры. Вы проверили бы бизнес-операции, и логика, выполняемая в этих операциях, вызовет сеттеры. (Если они * не * вызывают сеттеры, то ни одна из ваших бизнес-операций * не использует * эти сеттеры, а сеттеры должны быть полностью удалены из кода.) Для тестов интеграции вы хотите полностью удалить логику из тестов и тестируют только сами точки интеграции (обычно операции DAL). Есть некоторые варианты там, в зависимости от того, что работает для вашей команды. Но временная связь все равно должна быть удалена. – David
Спасибо! Большинство моих вызовов службы - простые сеттеры, чем вызов _orm.Update (object). Только некоторые из моих функций действительно требуют бизнес-логики, которая должна быть объединена. Это довольно простая программа. –