Давайте сосредоточимся на тестах, которые вы определили первыми. Все, кроме последнего (mustReturnQueryQueueEventArgs...
), хороши, и я мог сразу же сказать, что там тестируется (и это очень хороший знак, указывающий, что они описательны и, скорее всего, просты).
Единственная проблема - ваш последний тест. Обратите внимание, что широкое использование слов "и" , "с" , "или" в имени теста обычно вызывает проблемы. Не очень понятно, что он должен делать. Сначала возвращаются правильные результаты, но кто-то может поспорить, что это неопределенный термин? Это верно, это расплывчато. Однако вы часто узнаете, что это действительно довольно распространенное требование, подробно описанное в контракте метода / операции.
В вашем конкретном случае я бы упростил последний тест, чтобы проверить, возвращаются ли правильные результаты, и это все. Вы уже тестировали состояния, события и прочее, что приводит к получению результатов, поэтому в этом больше нет необходимости.
Теперь, советы в ссылках, которые вы предоставили, на самом деле довольно хорошие, и , как правило, , я предлагаю придерживаться их (одно утверждение для одного теста). Вопрос в том, что на самом деле означает единственное утверждение ? 1 строка кода в конце теста? Давайте рассмотрим этот простой пример:
// a method which updates two fields of our custom entity, MyEntity
public void Update(MyEntity entity)
{
entity.Name = "some name";
entity.Value = "some value";
}
Этот метод заключает контракт на выполнение этих двух операций. Под успехом мы понимаем, что сущность корректно обновляется. Если один из них по каким-либо причинам выходит из строя, метод как единица считается неудачным. Вы можете видеть, куда это идет; вы либо получите два утверждения, либо напишите свой собственный компаратор исключительно для целей тестирования.
Не обманывайтесь одиночным утверждением ; речь идет не о строках кода или количестве утверждений (однако в большинстве тестов, которые вы напишете, это действительно отобразит 1: 1), а об утверждении единственного блока ( Например, update считается единицей). И единица может быть на самом деле множеством вещей, которые не имеют никакого смысла без друг друга.
И это именно то, на что один из вопросов вы связали цитаты (Роя Ошерова):
Обычно я рекомендую тестировать одну логическую КОНЦЕПЦИЮ на тест. Вы можете иметь несколько утверждений на один и тот же объект. как правило, это будет та же концепция, что и при тестировании.
Это все о концепции / ответственности; не количество утверждений.