Я тест-драйв метод, который заключается в создании коллекции объектов данных. Я хочу убедиться, что свойства объектов установлены правильно. Некоторые свойства будут установлены одинаково; другим будет присвоено значение, которое зависит от их положения в коллекции. Естественный способ сделать это, кажется, с петлей. Однако Рой Ошеров настоятельно рекомендует не использовать логику в модульных тестах ( Art of Unit Testing , 178). Он говорит:
Тест, содержащий логику, обычно тестирует более чем одну вещь за раз, что не рекомендуется, потому что тест менее читабелен и более хрупок. Но тестовая логика также добавляет сложности, которая может содержать скрытую ошибку.
Как правило, тесты должны представлять собой серию вызовов методов без потоков управления, даже
try-catch
без вызовов assert.
Тем не менее, я не вижу ничего плохого в своем дизайне (как еще вы генерируете список объектов данных, некоторые значения которых зависят от того, где в последовательности они находятся? - не могу точно сгенерировать и протестировать их отдельно). Что-то не подходит для тестирования с моим дизайном? Или я слишком жестко предан учению Ошерова? Или есть какая-то секретная магия юнит-теста, о которой я не знаю, которая обходит эту проблему? (Я пишу в C # / VS2010 / NUnit, но, если возможно, ищу не зависящие от языка ответы.)
in
) необходимым, если тест «Frob был успешно добавлен в существующую коллекцию».
toString()
коллекционирую и сравниваю с тем, что должно быть. Просто и работает.