Несколько утверждений в модульном тесте [дубликаты]

На этот вопрос уже есть ответ:

Это плохая практика - иметь более одного утверждения в модульном тесте? [закрыто 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, которая вводит некоторые сложности, которые не стоит здесь вдаваться.

Еще раз спасибо.

Ответы на вопрос(7)

Ваш ответ на вопрос