Имеет единица/интеграционный тест без, утверждает право на существование?

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

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

Таким образом, я задаюсь вопросом, какова может быть цель таких тестов и что еще может быть протестировано с этим?

7
задан DixonD 6 August 2010 в 13:43
поделиться

7 ответов

Я бы позволил им иметь право на существование, если они будут тестировать какой-то «устаревший код» - код, которым никто не владеет. Нет, если они там, чтобы устроить шоу «высокого покрытия кода».

Это первый шаг к уверенности в коде. Невидимая проверка: «исключения не выбрасываются». Однако после того, как вы завершили приложение в некоторых подобных дымовых тестах, следующим шагом будет превращение неявной проверки в явную - наденьте свой разумный предел и внесите наблюдаемые изменения, которые вы можете утверждать на основе своих тестов.
Вы можете использовать такие инструменты, как TestLint, чтобы отловить подобные тесты.

5
ответ дан 6 December 2019 в 15:17
поделиться

Вот пример (C #, NUnit):

[Test]
public void StartUpShutDownDoesntThrow() {
   var aService = new Service();
   aService.StartUp();
   aService.ShutDown();
}

Если этот тест пройден, он гарантирует следующее:

  • Конструктор не генерирует исключение
  • Startup () не 'не генерирует исключение
  • ShutDown () не генерирует исключение

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

Итак, да, тесты без утверждений тоже могут иметь свою ценность.

4
ответ дан 6 December 2019 в 15:17
поделиться

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

Я делаю это, например, для кода (Python), который производит графический вывод. Я достаточно счастлив, что графика вообще создается. Когда тест не проходит, я знаю, что что-то сломалось.

0
ответ дан 6 December 2019 в 15:17
поделиться

Хм, нет!

Тест без Assert явно является запахом дизайна. Это потому, что хороший тест должен точно сообщать в коде, ЧТО он тестирует, и он также должен быть надежным.

Тест вида

[Test]
public void DoSomethingDoesNotThrow()
{
   var aService = new Service();
   aService.DoSomething();
}

бессмыслен, даже потенциально вреден, потому что он пройдет независимо от того, что делает aService.DoSomething()`. Но самая большая проблема в том, что он ничего не тестирует. (И кстати: как это может проверить "точность"?)

Лучше бы вместо этого протестировать какую-нибудь функциональность aService.DoSomething()! Если такой тест пройдет, вы будете знать, что исключения не происходит, так зачем тогда вообще нужен такой "тест", как приведенный выше?

В общем: Всегда проверяйте факты, никогда - отсутствие этих фактов.

Только потому, что это часто делается в реальном мире, не делает это хорошей практикой...

Thomas

3
ответ дан 6 December 2019 в 15:17
поделиться

Это могут быть дымовые тесты, предназначенные для доказательства того, что что-то не генерирует исключение или что-то другое выполняет работу (например, имитирующий объект).

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

1
ответ дан 6 December 2019 в 15:17
поделиться

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

1
ответ дан 6 December 2019 в 15:17
поделиться

Да, как @ Джон и @Olivier отмечают, что иногда полезно просто знать, что какой-то код выполняется без исключения исключений (и, я думаю, само собой разумеется, без ошибок компиляции). Но это редкие случаи, и я ни при каких обстоятельствах не рассматриваю их тесты на «точность».

0
ответ дан 6 December 2019 в 15:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: