Tdd: Как Правильно Писать Спецификации (Описано)

На курсах TDD обычно избегают написания спецификаций — утверждений или проверочных гипотез — поскольку здесь мало программирования.

Однако они очень важны.

Они определяют, как и какие тесты будут написаны, а также определяют, насколько легко будет исправить поломку.

Для их реализации практически не требуется времени.

Это первое, что связывает пользовательскую историю и код, и первое, что показывает провал тестового кода.

Они же являются тем, что дополнительно защищает нас от ошибок в коде самого теста.

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

Если пользователь истории использует термин «вход», то утверждения не могут изменить этот термин на аутентификацию/авторизацию/проверку.

Если история написана плохо, измените ее.

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

Валидный скрипт хорошо соответствует принципу единой ответственности, поэтому имя компонента должно совпадать с описанием теста.

Если валидных скриптов много, то, вероятно, на компоненте лежит слишком большая ответственность.

Также один сценарий, как правило, описывает либо событие ui, либо какой-то паттерн.

Хорошие кандидаты на имя компонента могут содержать имя паттерна: Validator, Strategy, Builder, Transformer, Controller и т.д. Или название события: Submitter, Login, ReadonlyOrderView и т.д. Т.

е.

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

Плохие имена: слишком абстрактные (Service, Component, Helper, Utility) и двойные (ValidatorAndRenderer).

Третий, спецификации должны явно указывать условия .

Плохо:

  
  
   

@Test public void testValidatePassword(){}

Лучше:

@Test public void loginController_whenValidUsername_andValidPassword_shouldLogUserIn(){}

Нам не придется вызывать эту функцию откуда-то еще, поэтому допустимы сверхдлинные имена.

Если количество условий в тесте не умещается в строку, то, возможно, следует изменить структуру компонента.

То же самое и с javascript-тестами, но туда можно вкладывать условия, что делает его более удобным.



describe('login UI component', () => { describe('when username provided', () => { describe('when valid password', () => { it('should log user in', () => { .

}); }); }); });

Явные термины легче читать и найти пропавшие .

Кроме того, если условие не соответствует написанному тестовому коду, то код можно легко исправить.

Хорошее описание, в общем, является заменой документации и комментариев кода.

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

Сами условия должны быть согласованы в коде для удобства чтения, например ДАННО-КОГДА-ТО-СЛЕДУЕТ и т. д. В-четвертых, спецификации должны быть упрощены .

Полезно записать их в обратном порядке: Сначала ошибки, сначала нули, потом счастливый путь.

Тогда нет желания заканчивать тестирование после одного валидного варианта использования.

Для компонентов пользовательского интерфейса: рендеринг, события.

Для компонентов с состоянием все состояния являются последовательными.

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



TDD: как правильно писать спецификации (описано)

Хорошая практика при написании спецификации — написать ее полностью в виде текста, а затем попросить коллегу прочитать ее для ясности и отсутствия недостающих терминов.

Тогда, собственно, и можно приступать к написанию реализации.

Довольно часто уже в таком виде задача отчуждается, т.е.

хорошо, когда реализацию тестов пишет кто-то другой.

В-пятых, реализация теста должна соответствовать тому, что написано в описании .

Хорошей практикой является разделение его на Arrange-Act-Assert, чтобы легко сопоставить ту или иную часть реализации.

Текст утверждений и исключений, если они присутствуют, также должен быть соотнесен с описаниями тестов; как правило, мы можем их просто дублировать.

Само собой разумеется, что при добавлении условий или утверждений в тест вам также необходимо обновить описания тестов.

Итак, последовательность написания спецификации может быть следующей.

  • прочитать историю пользователя
  • назовите компонент и действительный скрипт
  • сформулировать условия валидного сценария
  • дополнить спецификацию ошибочными сценариями, разместив их вверху
  • пусть сосед прочитает и исправит то, что он пропустил
  • Реализуйте тесты и компоненты один за другим, используя цикл рефакторинга «красный-зеленый».

Теги: #tdd
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.