Юнит-тестирование. Как и зачем проводить. 

Юнит-тестирование. Как и зачем проводить. 

Agility Hackers

Существует множество методологий тестирования кода: приёмочное (конечное перед развертыванием программы), сравнительное (на основе тест-кейсов сравнивается количество ошибок при разных вариациях системы), регрессионное (для выявления возможных ошибок, вызванных изменениями в коде), модульное, интеграционное (о них пойдёт речь дальше) . Последнее, например, используют практически все, когда тестят, правильно ли компоненты системы взаимодействуют между собой. Это происходит уже после сборки всего приложения с помощью кнопок вроде Test me и практически не поддаётся автоматизации. 

Но если надо проверить правильную работу отдельно каждой функции, то применяется модульное (оно же юнит-тестирование). Тогда до или после разработки каждой новой функции программист пишет специальный код, призванный определить, верно ли она работает. 

Юнит-тестирование позволяет: 

• проверить отдельные модули программы и выявить баги на любых стадиях работы

• увидеть, не вызвало ли изменение кода ошибки в предыдущих частях 

• проверить функциональность для разных платформ и браузеров

• автоматически запомнить новые ошибки и не допускать их впредь


Если проект большой и постоянно развивается, то без юнит-тестов он рано или поздно обрастёт ошибками и потеряет изначальный смысл. Однако, юнит-тестирование не нужно в некоторых случаях: 

• Если вы делаете простенький сайт из нескольких HTML-страниц, то быстрее и проще проверить вручную

• Важно только внешнее представление – анимация, сложная вёрстка, баннеры

• Проект будет работать пару дней на выставке. В начале работы не совсем понятно, что именно нужно получить в конце

• Вы – сверхчеловек. Всегда предчувствуете, где и когда появится баг


Если это все не про вас, то советуем ознакомиться со следующей статьёй по юнит-тестированию с листингами и подробными пояснениями. 

«Юнит-тестирование для чайников»

Автор последовательно описывает, что необходимо помнить при написании юнит-тестов: 

• Выбрать их логическое расположение в VCS

• Выбрать способы именования проектов с тестами, тестовых классов и методов тестируемых классов. 

• Найти подходящий текстовый фреймворк

• Тестировать в основном сложный код без зависимостей или не очень сложный, но с зависимостями

• Придерживаться единого стиля написания тела теста. Например, AAA (arrange, act, assert)

• Тестировать одну вещь за раз

• Всегда проводить рефакторинг перед запуском тестов, что приучает сразу выстраивать грамотную архитектуру кода

Все правила сопровождаются примерами и подробными описаниями. Кроме того, автор затрагивает такие темы, как работа с унаследованным кодом, проверка кода самого теста, способы измерения успешности. 


Мы осветили принципы работы с юнит-тестами, а в следующем материале расскажем об инструментах для проверки кода на JavaScript. 


Do unit-testing, 

Agility Hackers