Могу ли я убедиться, что все тесты содержат утверждение в тесте / модуле? - PullRequest
2 голосов
/ 11 июня 2010

С помощью test / unit и minitest можно ли провалить какой-либо тест, который не содержит утверждения, или потребовалось бы исправление обезьяны (например, проверка, увеличивается ли количество утверждений после каждого теста)?

Справочная информация : я не должен писать модульные тесты без утверждений - как минимум, я должен использовать assert_nothing_raised, если я проверяю дым, чтобы показать, что я курю тестирование.

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

Ответы [ 3 ]

1 голос
/ 20 июня 2012

Чтобы убедиться, что юнит-тесты действительно проверяют что-либо, используется метод Мутация .

Для Руби вы можете взглянуть на Мутант .

0 голосов
/ 11 июня 2010

Я не думаю, что принудительное выполнение теста без подтверждения действительно полезно. Наличие утверждения в тесте не является самоцелью - цель состоит в том, чтобы написать полезные тесты .

Отсутствующее утверждение является лишь признаком того, что проверка может не быть полезной. Интересный вопрос: Не пройдёт ли тест, если что-то сломается? . Если нет, то, очевидно, бесполезно.

Если все, что вы тестируете, это то, что код не падает, тогда assert_nothing_raised вокруг него - просто своего рода комментарий. Но проверка на «отсутствие взрывов», вероятно, указывает на слабый тест сам по себе В большинстве случаев он не дает вам никакой полезной информации о вашем коде (потому что «без сбоев! = Правильно»), так почему вы написали тест в первую очередь? Кроме того, я предпочитаю метод, который взрывается правильно, а не метод, который просто возвращает неверный результат.

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

В противном случае я бы проверил поведение, а не отсутствие сбоев. В случае, если у меня есть «пустые» тесты (это означает, что я еще не написал тестовый код), я обычно помещаю внутри #flunk, чтобы напомнить мне.

0 голосов
/ 11 июня 2010

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

Обеспечение того, чтобы тесты провалились в первую очередь, является хорошей практикой, которую следует превратить в привычку.

Помимо вещей, которые вы упоминаетеЯ часто устанавливаю неправильные значения в утверждениях в новых тестах, чтобы проверить, что тест действительно выполняется и не проходит.(Тогда я, конечно, исправлю это :-) Это менее навязчиво, чем редактирование производственного кода.

...