TypeMock: класс Mocking с поддельными значениями - PullRequest
0 голосов
/ 19 августа 2011

Привет всем,

У меня есть класс "Abc", в котором у меня есть свойство только для чтения (Context). В конструкторе класса «Abc» я устанавливаю значение только для чтения, используя закрытую переменную (_context). например, Abc() {_context=new Xyz();}

Я хочу создать контрольный пример с использованием TypeMock, в котором я хочу смоделировать класс Xyz и вернуть значение _context. Так что я могу заполнить контекст, используя поддельные данные.

Пожалуйста, дайте мне знать, возможно ли смоделировать класс со значениями. Спасибо

1 Ответ

3 голосов
/ 19 августа 2011

На что вы хотите обратить внимание, так это на функциональность Isolator «Swap».

// First set up your fake Xyz.
var fakeXyz = Isolate.Fake.Instance<Xyz>();
Isolate.WhenCalled(() => fakeXyz.SomeMethod()).WillReturn("Value");

// Now tell Isolator that the next time someone does
// "new Xyz()" you want it to be your fake.
Isolate.Swap.NextInstance<Xyz>().With(fakeXyz);

// Create your Abc and do your assertions. This should pass:
var realAbc = new Abc();
Assert.AreEqual("Value", realAbc.Context.SomeMethod();

Хорошим справочником для определения такого рода основных функций Isolator является электронная документация на сайте Typemock..Ознакомьтесь с разделами «Быстрый старт» и «Использование Typemock Isolator».Есть еще много примеров, чтобы показать вам, как делать аналогичные и более продвинутые вещи.

ОБНОВЛЕНИЕ: Ранее я показал Assert.AreSame(fakeXyz, realAbc.Context) как способ проверки обмена.Похоже, что в некоторых версиях Typemock Assert.AreSame потерпит неудачу, потому что работает какой-то механизм динамического прокси-сервера - они на самом деле не заменяются на буквально тем же экземпляром фейка, они 'Вы делаете некоторые хитрости, чтобы заставить вещи случиться.Однако вызовы на поддельном экземпляре все равно будут вызываться, и вы все равно получите ожидаемый результат.Я обновил образец фрагмента соответственно.

...