Как правильно тестировать последовательность сложных объектов? - PullRequest
1 голос
/ 08 апреля 2011

Как правильно провести модульное тестирование метода, который возвращает последовательность сложных объектов?

Я использую поиск веток. У меня есть хранилище, которое возвращает объект Branch, который имеет различную информацию, такую ​​как

  • Название филиала
  • Адрес
  • Местоположение
  • Продукты на складе

У меня есть хранилище, которое я подделал, чтобы всегда возвращать известную последовательность Branch объектов, и мне нужно проверить логику в моей службе BranchFinder.

Метод Find принимает местоположение (широта / долгота) и спецификацию продукта в виде Flags enum.

public IEnumerable<Branch> Find(Location location, Products products);

Зная данные, с которыми будет работать поиск, я могу смело указать местоположение и спецификацию продукта и знать, чего ожидать, но как я могу утверждать, что последовательность правильная.

например.

var loc = new Location(53.79424, -1.546112);
var results = service.Find(loc, Products.Milk | Products.Bananas);

Для этого запроса я знаю, что определенное подмножество данных должно быть возвращено в определенном порядке, а также, что расстояние от текущего местоположения до ветви должно увеличиваться при повторении набора результатов.

Как правильно / лучше всего проверить эти правила и ситуации?

Ответы [ 2 ]

1 голос
/ 08 апреля 2011

Первое, что я хотел бы сделать, это убедиться, что вы получаете доступ к Сервису через интерфейс ILocatorService.Также убедитесь, что любая последующая зависимость должна получать информацию о ветвях, также используемую через интерфейс (чтобы вы могли внедрить Mock позже в своем тесте).

Также, имейте в виду, что вы тестируете сам ILocatorService (чтобы убедиться, что любое изменение, внесенное вами в сервис, нарушает его).

Для любых зависимостей, которые использует ILocatorService, вы можете использовать RhynoMocks для возврата набора результатов (он может отправляться в БД или в приложение другого поставщика, чтобы предоставить нам список ветвей)

Таким образом, вашвходные данные для ILocatorService остаются прежними, и единственное, что вы тестируете, - это если какая-либо измененная вами логика нарушает существующие тесты / функциональность.

1 голос
/ 08 апреля 2011

Если вы знаете, сколько результатов получено из метода Find, вы можете преобразовать его в список или массив и проверить каждую позицию, чтобы проверить, имеют ли объекты Branch правильные значения, вот как я бы это сделал.

...