Определенно. Некоторые люди говорят, что «любой тест лучше, чем вообще никакой». Я категорически не согласен - плохо написанные тесты затягивают ваше время разработки, и вы теряете дни, исправляя «сломанные» тесты, потому что они не были хорошими модульными тестами. Для меня на данный момент две вещи, на которых я концентрируюсь, чтобы сделать мои тесты ценными, а не бременем, это:
Ремонтопригодность
Вы должны проверять результат ( что происходит), а не метод ( как это происходит). Ваша настройка для теста должна быть настолько отделена от реализации, насколько это возможно: настраивать только результаты для вызовов службы и т. Д., Которые абсолютно необходимы.
- Используйте фальшивый фреймворк, чтобы ваши тесты не зависели ни от чего внешнего
- По возможности любите заглушки над макетами (если ваша структура различает их)
- Нет логики в тестах! If, переключатели, for-eaches, case, try-catches и т. Д. - все это большие запреты, поскольку они могут вносить ошибки в сам код теста.
читабельность
Можно разрешить в своих тестах немного больше повторений, чего вы обычно не допустите в своем рабочем коде, если это сделает их более читабельными. Просто сбалансируйте это с обслуживаемым материалом выше. Будьте прямо в том, что делает тест!
- Старайтесь придерживаться стиля «устраивай, действуй, утверждай» для своих тестов. Это отделяет ваши настройки и ожидания от сценария, от выполняемого действия и утверждаемого результата.
- Сохраняйте одно логическое утверждение для каждого теста (если в имени вашего теста есть «и», вам может потребоваться разбить его на несколько тестов)
В заключение, вы должны быть очень обеспокоены «вонючими» тестами - они могут закончиться просто пустой тратой вашего времени, не предоставляя никакой ценности.
Вы сказали:
Модульное тестирование обычно требует различных «вонючих взломов», таких как функции заглушки.
Похоже, вы могли бы определенно ознакомиться с некоторыми приемами модульного тестирования, такими как использование Mocking Framework, чтобы сделать вашу жизнь намного проще. Я очень и очень рекомендую «Искусство модульного тестирования» , которое охватывает все вышеперечисленное и многое другое. Я нашел это полезным после долгой борьбы с плохо написанными, не поддерживаемыми, «вонючими» тестами. Это одна из лучших инвестиций времени, которые я сделал в этом году!