Юнит-тестирование. Как и зачем проводить.
Agility HackersСуществует множество методологий тестирования кода: приёмочное (конечное перед развертыванием программы), сравнительное (на основе тест-кейсов сравнивается количество ошибок при разных вариациях системы), регрессионное (для выявления возможных ошибок, вызванных изменениями в коде), модульное, интеграционное (о них пойдёт речь дальше) . Последнее, например, используют практически все, когда тестят, правильно ли компоненты системы взаимодействуют между собой. Это происходит уже после сборки всего приложения с помощью кнопок вроде Test me и практически не поддаётся автоматизации.
Но если надо проверить правильную работу отдельно каждой функции, то применяется модульное (оно же юнит-тестирование). Тогда до или после разработки каждой новой функции программист пишет специальный код, призванный определить, верно ли она работает.
Юнит-тестирование позволяет:
• проверить отдельные модули программы и выявить баги на любых стадиях работы
• увидеть, не вызвало ли изменение кода ошибки в предыдущих частях
• проверить функциональность для разных платформ и браузеров
• автоматически запомнить новые ошибки и не допускать их впредь
Если проект большой и постоянно развивается, то без юнит-тестов он рано или поздно обрастёт ошибками и потеряет изначальный смысл. Однако, юнит-тестирование не нужно в некоторых случаях:
• Если вы делаете простенький сайт из нескольких HTML-страниц, то быстрее и проще проверить вручную
• Важно только внешнее представление – анимация, сложная вёрстка, баннеры
• Проект будет работать пару дней на выставке. В начале работы не совсем понятно, что именно нужно получить в конце
• Вы – сверхчеловек. Всегда предчувствуете, где и когда появится баг
Если это все не про вас, то советуем ознакомиться со следующей статьёй по юнит-тестированию с листингами и подробными пояснениями.
«Юнит-тестирование для чайников»
Автор последовательно описывает, что необходимо помнить при написании юнит-тестов:
• Выбрать их логическое расположение в VCS
• Выбрать способы именования проектов с тестами, тестовых классов и методов тестируемых классов.
• Найти подходящий текстовый фреймворк
• Тестировать в основном сложный код без зависимостей или не очень сложный, но с зависимостями
• Придерживаться единого стиля написания тела теста. Например, AAA (arrange, act, assert)
• Тестировать одну вещь за раз
• Всегда проводить рефакторинг перед запуском тестов, что приучает сразу выстраивать грамотную архитектуру кода
Все правила сопровождаются примерами и подробными описаниями. Кроме того, автор затрагивает такие темы, как работа с унаследованным кодом, проверка кода самого теста, способы измерения успешности.
Мы осветили принципы работы с юнит-тестами, а в следующем материале расскажем об инструментах для проверки кода на JavaScript.
Do unit-testing,
Agility Hackers