Что происходит с методами при использовании Moq для макета интерфейса? - PullRequest
0 голосов
/ 27 апреля 2018

Что происходит с методами при использовании Moq для макета интерфейса?

Допустим, у меня есть взаимодействие ISomething, которое IoC отображает на класс Something. Затем в моем тесте я делаю это: var something = new Mock<ISomething>();.

Допустим, интерфейс содержит метод: string method();.

Теперь, если я вызову этот метод для смоделированного экземпляра, something.method(), будет ли он сопоставлен с реализацией класса Something, или он просто вернет void? Будет ли Moq пытаться сопоставить интерфейс с реализацией?

1 Ответ

0 голосов
/ 27 апреля 2018

Moq не будет пытаться использовать вашу реализацию, и на самом деле ничего о ней не знает (даже не волнует, существует ли она). Вместо он генерирует свой собственный класс во время выполнения , который реализует ваш интерфейс ISomething. И его реализация - это то, что вы настраиваете для использования методов something.Setup().

Если вы пропустите его настройку, он просто вернет значение по умолчанию и больше ничего не будет делать. Например,

var something = new Mock<ISomething>();
var result = something.Object.method(); // returns NULL

var somethingElse = new Mock<ISomething>();
somethingElse.Setup(s=>s.method()).Returns("Hello World");
var otherResult = somethingElse.Object.method(); // Returns "Hello World"

Установки могут быть довольно сложными, если вам это необходимо, в том числе возвращать разные результаты для разных аргументов или для разных вызовов (при первом возврате одно значение, при втором вызове - другое). Для более подробной информации вы можете проверить документация .

Обратите внимание, что something.Object и somethingElse.Object - это совершенно разные реализации (классы) интерфейса ISomething. Вы можете проверить это по телефону:

var whatMySomethingIs = something.Object.GetType();
var whatMySomethingElseIs = somethingElse.Object.GetType();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...