Бесконечные дебаты: циклы for в тестовых примерах или множественные утверждения

Бесконечные дебаты: циклы for в тестовых примерах или множественные утверждения

14 декабря 2022 г.

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

Это не означает, что раньше разработчики XP не тестировали приложения, но написание тестового кода стало популярным.

В связи с этим возникли разные проблемы, например, любой разработчик, который следует TDD (разработка через тестирование) или знаком с этим, следует потоку: написать неудавшийся тест, сделать его пройденным с простейшим возможным изменением, а затем провести рефакторинг.< /p>

Рефакторинг — важный этап. Хотя специалисты-практики практикуют TDD уже несколько лет, поскольку формального образования нет, на ум приходят некоторые вопросы:

  1. Должен ли я использовать логику в своих тестах?
  2. Должен ли я использовать несколько утверждений в своих тестах?

Здесь мы сосредоточимся на аспекте утверждений, а также на логике внутри тестов, например, используя циклы for.

Использовать цикл for или нет?

Если подумать, на первый взгляд наличие логики (любого рода внутри тестового примера) выглядит как запах. Немного углубившись в тему, в книге xUnit упоминается, что тесты не должны иметь логики внутри тестового примера.

Например, классическая логика — это оператор if/else: если переменная X равна истине, я утверждаю, что X истинна, в противном случае я утверждаю, что Y — это строка. При этом у теста есть две разные причины провала.

Если вы это сделаете, вам придется потратить дополнительное время на понимание логики теста и посвятить время отладке того, какая ветвь не удалась.

<цитата>

В конце концов, если у вас есть динамический код в тестовом примере, кто будет тестировать тест?

Поэтому у нас все еще есть вопрос «Можно ли использовать циклы for в тестовых примерах?». Давайте начнем с некоторых данных опроса, так как они могут дать представление о том, какой подход используют практикующие специалисты.

опрос в Твиттере не привлек особого внимания, но судя по ответившим, кажется, что разработчикам все равно. об этом (как бы интересно это ни звучало, но в комментариях есть твердые мнения).

С одной стороны, результаты показывают лишь незначительную разницу. Ответ «нет», вы не должны использовать для циклов, победил в опросе, но с разницей в 2,5% голосов по сравнению с ответом «да». Не такая уж большая разница.

С другой стороны, если взять репозитории GitHub, используемые в серии антишаблонов TDD, и перейти внутрь исходный код, вероятность увидеть цикл for внутри тестового примера не так высока; по крайней мере, это было не для меня. Шаблон представляет собой AAA без циклов for.

И последнее, но не менее важное: как насчет множественных утверждений?

В комментариях к твиту есть серая область, но что касается данных опроса в Твиттере, нет правила иметь только одно утверждение для каждого тестового случая; победителем стал «Сколько хочу».

Разработчики сказали, что для текущего тестирования, если вы несколько раз утверждаете одно и то же поведение, почему бы вам не использовать несколько утверждений?

Эллиотт Расти Гарольд рекомендует использовать одно утверждение для каждого метода тестирования:

https://youtu.be/fr1E9aVnBxw?t=938

В общем, утверждения — сложная тема для решения, и это зависит от контекста, в котором был написан тест, поэтому вывод из этого раздела для меня следующий:

<цитата>

послушайте ваши тесты (Стив Фриман и Нэт Прайс).

Прослушивание тестов и отзывы, которые они дают, являются показателем того, делаете ли вы что-то хорошее или нет — хорошо в том смысле, что это облегчает поддержание скорости выполнения теста и дает правильную обратную связь, когда он терпит неудачу.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE