Ноябрь 13, 2008
Юнит-тестирование — плохо
Для не знающих
Вы попробовали тестирование и поняли, что ваш случай в корне отличается от того, что в книге. Ваши сроки из реальной жизни, у вас нет времени еще и тесты писать. Поддержка тестов только замедляет разработку. Какой толк, все равно та либа работает только на том сервере, а локально нет.
Но
Вы, скорее всего, не умеете писать тесты и, очень вероятно, что в вашем коде присутствует большинство признаков плохого кода. Это лечится при желании. Лекарства:
- Рефакторинг. Улучшение существующего кода
- Экстремальное программирование: разработка через тестирование
- Шаблоны тестирования xUnit. Рефакторинг кода тестов — эта книга мега-лекарство.
Для знающих много пользы
А знать надо вот что:
- Юнит-тест — тестирует лишь небольшой кусочек функционала.
В идеале протестировать метод на то, что он правильно делает вызовы других методов - Юнит-тест невероятно быстр.
Поскольку тестируется лишь маленький кусочек функционала без обращений к бд или файлам — все довольно таки быстро. - Для большого метода юнит-тест написать очень сложно.
Сложно, потому что много логики. Приходится слишком много заглушек делать для одного метода. - Тестируемый функционал не обращается к базе данных, не отправляет запросов, не считывает файлы с диска.
Это долго и тестируемый функционал становится незащищенным от сбоев внешнего функционала. - Юнит-тест не зависит не от порядка выполнения теста, не от сбоев в остальном функционале.
Тесты должны быть независимы — это упрощает локализацию ошибок. - Все юнит-тесты вместе взятые выполняются не более 10 секунд в любом проекте.
Иначе слишком часто запускать их будет не удобно. - Юнит-тесты как и код требуют рефакторинга.
Постоянно делая рефакторинг, получите свой тестовый язык (или апи) для тестов. - 100% покрытие юнит-тестами не даст 100% гарантии работоспособности проекта.
Всего не учтешь и не протестируешь.
- Тесты дадут возможность:
- избежать сценариев — кто похерил мой функционал? (разработчик); как же так, оно ведь уже работало? (заказчик)
- смело делать рефакторинг кода, который используется во всем проекте
- быстро находить ошибки
- получать удовольствие от разработки (когда знаешь, что все работает — очень хорошее чувство)
Еще мысли
Юнит-тесты писать сложно. Лень, незнание, самообман — очень веские помехи.
Разработка через тестирование? — В идеале.
Легко тестировать функционал для рассчетов чего-либо — это сплошное удовольствие.
Являются ли тесты гарантией успеха проекта? — Нет, также как и хороший код. Но приятнее работать с хорошим кодом и с протестированным функционалом.
Если проект не большой и его не надо будет сопровождать в будущем — можно и без тестов обойтись, используя копи-паст для ускорения разработки.
Кроме юнит-тестов нужно писать интеграционные тесты — те же юнит-тесты только без заглушек функционала. Выполняются долго, зато позволяют проверить, что механизм в собранном виде функционирует нормально.
В ваших реалиях скорее всего придется пойти на компромиссы. Вероятно, что быстрый старт вашего проекта важнее, чем в будущем более дешевое сопровождение проекта, поэтому придется балансировать. Если видите, что юнит-тесты писать уже нет времени — пишите интеграционные тесты на пользовательские сценарии, и юнит-тесты на рассчетную часть функционала.
И обязательно прочтите книги из списка, если еще этого не сделали.
Комментарии(5)

>Шаблоны тестирования xUnit. Рефакторинг кода тестов — эта книга мега-лекарство.
А что с качеством перевода?
Ужос качество, поэтому последние книги 4 из этой серии я читал в оригинале.
Последнее, что добило Implementation Patterns → Шаблоны реализации корпоративных приложений.
А подробнее об ужасе в xUnit?
Человек я, человек.
«Быстрый старт», «ваши реалии»…
Тесты используются для того, чтобы ускорить разработку, а не замедлить.
Стоп) Каюсь, Олег, книгу читал на английском. Сейчас открыл русский вариант и быстро его пролистал — мне понравилось.
Мне кажется, что ваш перевод хорош. Почитаю попозже еще и русский вариант.
Оценка была дана, основываясь на переводах книг из этой же серии.