Как заглушить реферат с Moq? - PullRequest
3 голосов
/ 18 декабря 2009

Допустим, у меня есть этот класс:

public abstract class CustomerCollectionBase : Collection<Customer>{}

Один из моих тестируемых классов принимает экземпляр CustomerCollectionBase (это будет некоторый подкласс). В тестируемом методе эта коллекция перечисляется через цикл for, а результаты проверяются и обрабатываются. как следует:

for (int i=0;i<_customers.Count; i++){
 //process customer
}

Можно ли заглушить эту коллекцию с помощью Moq, чтобы я мог передать заглушку как зависимость конструктору моего тестируемого класса?

Спасибо.

1 Ответ

3 голосов
/ 18 декабря 2009

Технически это было бы возможно, но сложно, так как защищаются только перезаписываемые элементы Collection<T>.

Было бы намного проще просто пропустить конкретную коллекцию, если только вы не должны выполнить какое-либо интерактивное тестирование самой коллекции.

Однако, если вы должны сделать это с Moq, вам сначала нужно добавить следующую директиву using в ваш тестовый код:

using Moq.Protected;

Теперь вы можете использовать методы Protected () для настройки макета с помощью соответствующих защищенных виртуальных методов CustomerCollectionBase.

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

...