Как бороться с ошибочными тестами на ошибки, которые не будут исправлены - PullRequest
2 голосов
/ 28 марта 2011

У меня есть сложный набор интеграционных тестов, который использует Perl WWW :: Mechanize для управления веб-приложением и проверки результатов на основе определенных комбинаций данных. Существует более 20 подпрограмм, составляющих логику тестов, циклически проходящих данные и т. Д. Каждый тест запускает несколько подпрограмм теста в другом наборе данных.

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

Так что мне делать с провальными тестами? Это всего лишь несколько тестов из нескольких десятков на комбинацию данных. 1) Я не могу позволить этому потерпеть неудачу, потому что тогда весь набор тестов потерпит неудачу. 2) Если мы их закомментируем, это означает, что мы пропустили этот тест для всех других наборов данных. 3) Я мог бы добавить флаг в конкретный набор данных, который не прошел, и не запускать тест, если этот флаг установлен, но тогда я передаю дополнительные флаги повсюду в моих подпрограммах теста.

Какой самый простой и простой способ сделать это? Или чисты и легки взаимоисключающие?

Ответы [ 3 ]

11 голосов
/ 28 марта 2011

Вот для чего TODO .

С блоком todo ожидается, что тесты внутри не пройдут.Test :: More будет запускать тесты в обычном режиме, но выводит специальные флаги, указывающие, что они "todo".Test :: Harness будет интерпретировать сбои как нормальные.Если что-то удастся, он сообщит об этом как о неожиданном успехе.После этого вы узнаете, что задача была сделана, и можете удалить флаг TODO.

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

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

0 голосов
/ 28 марта 2011

Если вы на самом деле используете Test :: More в сочетании с WWW :: Mechanize, дело закрыто (см. Комментарий от @daxim).Если нет, подумайте о похожем подходе:

# In your testing module
our $TODO;
# ...
if (defined $TODO) {
    # only print warnings
};

# in a test script
local $My::Test::TODO = "This bug is delayed until iteration 42";
0 голосов
/ 28 марта 2011

Я вижу два основных варианта

  1. отключить тест (закомментировав его), со ссылкой на вашу систему отслеживания ошибок (например, ошибку ig), возможно, оставив в сообщении заметку о том, что тест готов к этой ошибке

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...