Привет, с нами как всегда "Чистый код" Роберта Мартина и сегодня на очереди глава "Тестирование".
Тестирование
3 основных закона TDD (Test Driven Development):
- Сначала напишите тест и только потом код продукта
- Тестового кода должно ровно хватать на отказ
- Написанный код продукта должен преодолевать написанные тесты, не больше
Основные характеристики тестов (F.I.R.S.T.):
- Быстрота (Fast) - тесты должны выполняться быстро, иначе вы будете редко их запускать и код в них начнет загнивать
- Независимость (Independent) - тесты должны быть независимы друг от друга. Иначе будут возникать каскадные зависимости, скрывающие реальные проблемы.
- Повторяемость (Repeateble) - тесты должны давать повторяемые результаты в любой среде
- Очевидность (Self-validating) - результатом выполнения теста должен быть логический признак прошел/нет
- Своевременность (Timely) - модульные тесты пишутся непосредственно перед кодом продукта, обеспечивающим их прохождение
Именно тест обеспечивают гибкость всего продукта. Если у вас есть тесты, вы не боитесь изменять код. Чем шире охват тестирования, тем меньше опасений при изменении
Написание тестового кода отличается от написания кода приложения. Например, вы можете позволить себе некоторые вольности с затратами памяти или вычислительных ресурсов.
Но никогда не жертвуйте читаемостью тестового кода.
Тест должен содержать минимальное количество проверок. Идеальный вариант - одна проверка на тест.
Одна проверка на тест - идеальный случай. Периодически приходится размещать в тесте несколько проверок. В таком случае нужно помнить, что независимо от количества проверок за раз должна тестироваться только одна концепция.
Личный опыт автора блога :)
Самое сложное для меня сейчас в тестировании - придумывать тесты до того, как пишешь код. Пока что больше получается "опутывать" уже написанные решения. Как выпадает свободное время потихоньку перерешиваю первые задачки по базовым алгоритмам, т.к. есть возможность испытать их на достаточно злой системе тестов, написанных преподавателем и периодически приходится добавлять новые проверки в уже описанные) Есть определенный дзен в моменте, когда крутишь концепцию в мозгу и пытаешься придумать как еще её можно проверить на прочность.
Пример, в котором, на мой взгляд, тесты подходят под рекомендации книги можно посмотреть здесь. Оно все не войдет на скриншот, поэтому лучше смотреть на гитхабе, но без картинки оставлять публикацию.