webBG - програмисти, машинно обучение, javascript, python, php, питам, говорим, публикации

Когато използвате Moq за подигравка на интерфейс, какво се случва с методите?

Когато използвате Moq за подигравка на интерфейс, какво се случва с методите?

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

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

Сега, ако извикам този метод на подигравания екземпляр, something.method(), ще бъде ли съпоставен към изпълнението на класа Something или просто ще върне void? Moq ще се опита ли да картографира интерфейс с реализация?

27.04.2018

  • Трябва да предоставите дефиницията на метода като something.Setup(m => method()).Returns("Return Value"); 27.04.2018
  • Само ако беше възможно да стартирате нещо като var something = new Mock<ISomething>(); something.method() и да се видите... 27.04.2018

Отговори:


1

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();
27.04.2018
Нови материали

Записване на грешки — Как да записвате грешки във вашето приложение, за да ги отстраните по-късно
Записването на грешки е важна част от „обработването на грешки“. Накратко, когато възникнат определени грешки в програмите, вие искате да знаете за това. Това е особено важно при грешки. Ти..

Кратко въведение в теорията на графите
Кратко въведение в теорията на графите Втора част: внедряване на python на пълни графики В моята предишна статия въведох три основни концепции за графите: върхове, ръбове и тегла. В тази..

Днес ще пиша за машинно обучение. Смятам се за ентусиаст, а не за експерт, така че имайте това предвид. С това казано, искам...
Днес ще пиша за машинно обучение. Смятам се за ентусиаст, а не за експерт, така че имайте това предвид. С това казано искам да обясня защо машинното обучение има значение. За да бъда съвсем..

Какво е структурно типизиране и как Typescript го използва в своя полза?
Всички знаят тези дни, че „Typescript е строго синтактично надмножество на JavaScript и добавя незадължително статично въвеждане към езика.“. Но какво всъщност означава? Защо миграцията от..

3 начина за премахване на дубликати от масив в Javascript
Вие сте уеб разработчик? Програмист ли си? Тогава ще сте запознати с JavaScript и различните му вградени функции, методи и т.н. за различни реализации, проблеми и цели. Един от тези широко..

Архитектура и обучение на конволюционни невронни мрежи (7 точки):
Тази публикация предоставя подробности за архитектурата на Конволюционната невронна мрежа (CNN), функциите и обучението на всеки слой, завършвайки с резюме на обучението на CNN...

Създайте разширение за Chrome с помощта на Angular
Този урок е базиран на манифеста на разширението на chrome версия 3 (MV3), а също и на Angular версия 2+ (2, 3 и...). Ако не сте използвали манифест версия 3, можете да следвате този урок ,..