Коротко о TDD


Читаю книгу Роберта Мартина «Чистый код». Добрался до главы про тестирование. Она хоть и затрагивает тему поверхностно, всё же содержит в себе немало хороших рекомендаций. Ниже те, что я выписал.

Три закона TDD

  1. Не пишите код продукта, пока не напишете отказной модульный тест.
  2. Не пишите модульный тест в объёме большем, чем необходимо для отказа. Невозможность компиляции является отказом.
  3. Не пишите код продукта в объёме большем, чем необходимо для прохождения текущего отказного теста.

Чистота тестов

Тестовый код не менее важен, чем код продукта. Не считайте его «кодом второго сорта». К написанию тестового кода следует относиться вдумчиво, внимательно и отвественно. Тестовый код должен быть таким же чистым как и код продукта.

Какими отличительыми признаками характеризуется чистый тест? Тремя: удобочитаемостью, удобочитаемостью и удобочитаемостью. Вероятно, удобочитаемость в модульных тестах играет ещё более важную роль, чем в коде продукта. Что делает тестовый код удобочитаемым? То же, что делает удобочитаемым любой другой код: ясность, простота и выразительность. В тестовом коде необходимо передать максимум информации минимумом выразительных средств.

Хорошо написанный тест имеет понятную и простую структуру состоящую из трёх частей: построение, операция, проверка. Первая часть строит тестовые данные, вторая часть выполняет с ними операции, а третья часть проверяет, что операция привела к ожидаемым результатам.

Двойной стандарт

Код тестового API подчиняется несколько иным техническим стандартам, чем код продукта. Он также должен быть простым, локаничным и выразительным, но от него не требуется такая эффективность. В конце концов, тестовый код работает в тестовой среде, а не в среде реальной эксплуатации продукта, а эти среды весьма заметно различаются по своим потребностям.

Одна концепция на тест

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