Несколько утверждений в модульном тесте [дубликаты]
На этот вопрос уже есть ответ:
Это плохая практика - иметь более одного утверждения в модульном тесте? [закрыто 9 ответовЯ только что закончил читать «Искусство модульного тестирования» Роя Ошерова и стараюсь придерживаться лучших практик, которые он изложил в книге. Одна из лучших рекомендаций - не использовать несколько утверждений в тестовом методе. Причина этого правила мне достаточно ясна, но меня это удивляет ...
Если у меня есть такой метод:
public Foo MakeFoo(int x, int y, int z)
{
Foo f = new Foo();
f.X = x;
f.Y = y;
f.Z = z;
return f;
}
Должен ли я действительно писать отдельные модульные тесты, чтобы утверждать, что каждое отдельное свойство Foo инициализируется с предоставленным значением? Неужели в тестовом методе редко используется несколько утверждений?
FYI: я использую MSTest.
EDIT: Спасибо за все ответы. Я думаю, что я закончу с несколькими утверждениями. В моей ситуации тестируемое поведение состоит в том, что MakeFoo делает правильный Foo. Поэтому утверждения о том, что каждое свойство получает ожидаемое значение, должно быть достаточно. Тем не менее, если бы было условие для установки одного из свойств, я бы тестировал каждый из отдельных результатов отдельно.
Мне все еще не нравится это ... Причина, по которой мне нравится идея одного утверждения на тест, заключается в том, что вы знаете точную причину, по которой тест не прошел. Если вы решите проблему, то тест пройден. С несколькими утверждениями у вас нет одинаковых гарантий. Если вы исправите проблему, на которую ссылается ошибочное утверждение, ничто не сможет помешать следующему утверждению позже в тесте отказать в следующем. Если утверждения были разделены, вы бы знали об обоих сбоях с самого начала.
И, наконец, причина, по которой я не просто использую .Equals (), заключается в том, что в моей ситуации Foo является сущностью LINQ-To-SQL, которая вводит некоторые сложности, которые не стоит здесь вдаваться.
Еще раз спасибо.