Список объектов Mock (Moq) - лучшие практики / упрощение - PullRequest
3 голосов
/ 16 сентября 2009

Рассмотрим следующее:

new SUT(null, null, new List<IObjectBeingMocked>() { mockObjectOne.Object, mockObjectTwo.Object })

Моему SUT (тестируемая система) нужен список объектов в качестве третьего параметра. Это должно быть издевательством, так как я установил некоторые ожидания.

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

Что было бы лучшим способом легко / красиво преобразовать этот список фиктивных объектов в реальные объекты?

Ответы [ 4 ]

4 голосов
/ 16 сентября 2009

Возможно, вы могли бы использовать методы расширения для управления созданием списка и вызовом свойства Object для вас.

var list = new List<Mock<Foo>>() { ... };
new SUT( null, null, list.Select( o => o.Object ).ToList() );
2 голосов
/ 16 сентября 2009

Хороший способ справиться с этим - создать метод GetSUT (), который создает его только один раз в одном месте. Затем, когда ваше создание SUT изменится, вам нужно будет изменить его только в одном месте.

1 голос
/ 16 сентября 2009

Вы можете использовать метод Mocks.Query (), который будет возвращать коллекцию всех макетов экземпляров SUT.
Эта функция существует в бета-версии moq. Подробнее здесь :

1 голос
/ 16 сентября 2009

Вы можете ввести поясняющие переменные (местные) для ясности:

IObjectBeingMocked objectOne = mockObjectOne.Object;
IObjectBeingMocked objectTwo = mockObjectTwo.Object;

new SUT(null, null, new List<IObjectBeingMocked>() { objectOne, objectTwo });

РЕДАКТИРОВАТЬ: Возможно, с лучше выбранными именами, чем мой "objectOne", "objectTwo". ;)

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