Точно: это спорно! Это действительно хорошо, что вы сравниваете затраты / усилия на написание и поддержание вашего теста с ценностью, которую он вам принесет - и это именно то, что вы должны учитывать при каждом написанном тесте. Часто я вижу тесты, написанные ради тестирования и, таким образом, только добавляющие балласт к базе кода.
В качестве руководства я обычно беру, что хочу провести полный интеграционный тест для каждого важного успешного сценария / варианта использования. Другие тесты, которые я напишу, предназначены для частей кода, которые могут порвать с будущими изменениями или сломались в прошлом . И это определенно не весь код. Вот где ваше суждение и понимание системы и требований вступают в игру.
Предполагая, что у вас есть (интеграционный) тест для service.Execute(placeOrderOnHoldCommand)
, я не совсем уверен, добавит ли он значение для проверки, загружает ли служба заказ из хранилища ровно один раз. Но это может быть! Например, когда у вашего сервиса ранее была неприятная ошибка, которая приводила к попаданию в хранилище десять раз за один заказ, что приводило к проблемам с производительностью (просто компенсируя это). В этом случае я бы переименовал тест в PlaceOrderOnHold_LoadsOrderFromRepositoryExactlyOnce()
.
Так что для каждого теста вы должны решить для себя ... надеюсь, это поможет.
Примечания:
Тесты, которые вы показываете, могут быть совершенно обоснованными и хорошо написанными.
Похоже, что ваши методы тестовой последовательности вдохновлены тем, как в настоящее время реализуется метод Execute(...)
. Когда вы структурируете свой тест таким образом, вы можете привязать себя к конкретной реализации. Таким образом, тесты могут на самом деле усложнить изменение - убедитесь, что вы тестируете только важное внешнее поведение вашего класса.