среда, 27 мая 2015 г.

Модульный тест - определение

Это перевод слов Roy Osherov. Оригинал можно почитать Unit Test - Definition.

У меня ранее было ощущение, что "модуль" это самая маленькая часть кода насколько это возможно(метод, по факту). Но за последние пару лет я изменил свое мнение. Вот то что сейчас понимаю под модульным тестом на момент Октября 2011-го:

Модульный тест это автоматизированная часть кода, которая вызывает рабочий модуль в в системе и проверяет одно предположение относительно поведения этого рабочего модуля.

Рабочий модуль это один сценарий использования логической функциональности в системе, который может быть вызван через некоторый открытый интерфейс(в большинстве случаев). Рабочий модуль может охватывать один метод, целый класс или множество классов работающих совместно для достижения одной логической цели и которая может быть проверена.

Хороший модульный тест это:
  • Можно полностью автоматизировать;
  • Имеет полный контроль над всеми запускаемыми кусками кода (используйте моки или стабы для достижения изоляции если нужно)
  • Может быть запущен в любом порядке или как часть множества других тестов
  • Работает в памяти (нет БД или доступа к файлам, к примеру)
  • Постоянно выдает тот же результат(Вы всегда запускаете все тот же тест, ведь это не случайные числа, к примеру. За исключением интеграционных и наборов тестов)
  • Работает быстро
  • Проверяет одну логическую концепцию тестируемой системы
  • Читабельный
  • Поддерживаемый
  • Заслуживает доверия (если Вы видите его результат, то Вам не нужно отлаживать код. Вы просто в нем уверены).
Я рассматриваю любой тест не подходящий под все эти принципы как тест интеграционный и его следует добавить в проект "интеграционных тестов"

P.S.: Вы можете меня "поддержать" в моем стремлении переводить полезные навыки и можете это сделать посетив мою страничку 'donate'

Комментариев нет: