2015-01-11 2 views
2

У меня есть класс PhotoOrganiser, и я пытаюсь выполнить тестирование его метода SortAll. Этот метод вызывает другой метод в классе, MovePhoto.Отказывание одного метода объекта

Каков правильный путь? Используя Moq, я издевался над другими классами SortAll, но, насколько я вижу, нет способа издеваться над одним методом на объект, не издеваясь над самим объектом. Является ли самый чистый способ сделать это просто для создания нового подкласса, который переопределяет MovePhoto?

+0

https://github.com/Moq/moq4/wiki/Quickstart ctrl-f для "частичного" – zerkms

+0

Zerkms является правильным. То, что вы ищете, - это частичный макет **. 'Moq' поддерживает его. – MarcinJuraszek

+0

Спасибо, ребята, я пропустил это. Выполняя это, мне пришлось бы заставить методы переопределять виртуальные? Считается ли это хорошей практикой делать это исключительно для целей тестирования (в отличие от использования внутри самой программы)? – tsvallender

ответ

1

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

Предлагаю предложить второй дизайн. Возможно, класс PhotoOrganizer слишком сложен? Может быть движущиеся фотографии - достаточно большой объем работы, чтобы заслужить свой класс? Рассмотрите, что происходит, когда вы вводите MovePhoto в рамках метода SortAll. Я понимаю, PhotoOrganizer может показаться хорошим именем, учитывая назначение приложения, но в ООП организатор может кричать SRP нарушение. Проблемы с дизайном обычно очень быстро выделяются hard to write unit tests.

Считается, что вы можете решить это с частичным макетом, как упомянуто другими (и да, это требует, чтобы метод был виртуальным). Но это лечение симптомов, а не борьба с причинами.

Смежные вопросы