Это перевод слов Roy Osherov. Оригинал можно почитать Unit Test - Definition.
У меня ранее было ощущение, что "модуль" это самая маленькая часть кода насколько это возможно(метод, по факту). Но за последние пару лет я изменил свое мнение. Вот то что сейчас понимаю под модульным тестом на момент Октября 2011-го:
Модульный тест это автоматизированная часть кода, которая вызывает рабочий модуль в в системе и проверяет одно предположение относительно поведения этого рабочего модуля.
Рабочий модуль это один сценарий использования логической функциональности в системе, который может быть вызван через некоторый открытый интерфейс(в большинстве случаев). Рабочий модуль может охватывать один метод, целый класс или множество классов работающих совместно для достижения одной логической цели и которая может быть проверена.
Хороший модульный тест это:
- Можно полностью автоматизировать;
- Имеет полный контроль над всеми запускаемыми кусками кода (используйте моки или стабы для достижения изоляции если нужно)
- Может быть запущен в любом порядке или как часть множества других тестов
- Работает в памяти (нет БД или доступа к файлам, к примеру)
- Постоянно выдает тот же результат(Вы всегда запускаете все тот же тест, ведь это не случайные числа, к примеру. За исключением интеграционных и наборов тестов)
- Работает быстро
- Проверяет одну логическую концепцию тестируемой системы
- Читабельный
- Поддерживаемый
- Заслуживает доверия (если Вы видите его результат, то Вам не нужно отлаживать код. Вы просто в нем уверены).
Я рассматриваю любой тест не подходящий под все эти принципы как тест интеграционный и его следует добавить в проект "интеграционных тестов"
P.S.: Вы можете меня "поддержать" в моем стремлении переводить полезные навыки и можете это сделать посетив мою страничку 'donate'
Комментариев нет:
Отправить комментарий