Как написать хорошее тестовое сообщение - PullRequest
7 голосов
/ 20 декабря 2011

Я недавно начал писать модульные тесты в своих проектах и ​​заметил, что все операторы assert имеют аргумент сообщения.

Что делает хорошее сообщение для модульного теста?

$cache->set('foo', 3);
$this->assertEquals($cache->get('foo'), 3, 'what should i say?');

Спасибо!

Ответы [ 3 ]

3 голосов
/ 20 декабря 2011

Укажите проверяемый факт.

Рассмотрим:

$this->assertEquals($person->age, 21, "Age is 21")

против:.

$this->assertEquals($person->age, 21, "Age of person born on 1990-12-20");

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

1 голос
/ 20 декабря 2011

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

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

В приведенном выше примере я бы сказал что-то вроде «кеш для« foo »», чтобы сообщение возвращалось как «кеш для« foo », ожидаемый 3, но равный 67». Для кого-то, знакомого с тестом, это будет намного полезнее, чем «ожидаемый 3, но был 67 в строке 123 теста abc».

(я в основном разработчик Java, поэтому я говорю так, как будто это был JUnit; я предполагаю, что phpunit или как его там называют работают примерно так же.)

0 голосов
/ 07 июня 2018

Эта статья дает хороший пример пропуска параметра сообщения.В итоге:

  • Цель для описательных / полезных имен методов тестирования (это часто устраняет необходимость в сообщении)
  • Цель иметь одно утверждение на тест (чтобы метод тестаимя может описывать эту единственную цель)
  • Включить сообщение в качестве крайней меры (например, если вышеизложенное не может быть выполнено)

Примечание: я считаю, что сообщения хороши, когдаиспользуя такие функции, как DataRows.Сообщение помогает различить, какой DataRow может быть неисправен.C # / VS Тестовый пример:

[TestMethod]
[DataRow(<some arguments>, <message1>)]
[DataRow(<some arguments>, <message2>)]
[DataRow(<some arguments>, <message3>)]
public void MyTest(<some params>, string message)
{
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...