4

Класс WidgetDoer зависит от Foo, который не вводится. Мне нужно подделать реализацию _fooDoStuffWith() (а затем проверить, что Do() вернул результат - это упрощенное представление моего реального кода).Typemock Isolator: Выкачать зависимость, которая не вводится?

public class WidgetDoer { 
    readonly Foo _foo; 

    public WidgetDoer() { 
     _foo = new Foo(); 
    } 

    public Bar Do(Widget widget) { 
     var result = _foo.DoStuffWith(widget); 
     return result; 
    } 
} 

Я пытался использовать следующий синтаксис Isolator, чтобы предотвратить реальный Foo объект не создается (внутри WidgetDoer() конструктора), но реальный Foo экземпляра объекта в любом случае:

var fooFake = Isolate.Fake.Instance<Foo>(); 
Isolate.WhenCalled(() => new Foo()).WillReturn(fooFake); 

Могу ли я использовать Typemock, чтобы издеваться над зависимостью, которая не вводится?

ответ

0

Во-первых, при работе с API TypeMock Isolatar, я настоятельно рекомендую вам иметь этот PDF на вашей стороне: TypeMock Isolator API Quick Reference(PDF)

Что касается выше точки, да, я считаю, это распространенная ошибка, что создание подделки не делает означает, что он используется. Как вы указали выше, чтобы использовать его, вы должны сделать что-то вроде:

Isolate.Swap.NextInstance<Foo>().With(FooFake); 

Это заменит следующий экземпляр. Я уверен, что вы можете сделать:

Isolate.Swap.NextInstance<Foo>().With(FooFake); 
Isolate.Swap.NextInstance<Foo>().With(FooFake2); 

Это поменяет следующий создание объекта с экземпляром FooFake, а затем один после этого с FooFake2

Вы также можете сделать это:

Isolate.Swap.AllInstances<Foo>().With(FooFake); 

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

2

Declaimer Я работаю на Typemock.

Смена экземпляров устарела на некоторое время. Вы можете использовать:

var fakeFoo = Isolate.Fake.NextInstance<Foo>(); 

fakeFoo является прокси _foo в вашем коде.

Вы также можете использовать:

var fakeFoo = Isolate.Fake.AllInstances<Foo>(); 

Здесь fakeFoo является прокси для всех экземпляров Foo, создавших (новый) от этой линии на.

Оба примера создают поддельные и «своп» это в одной команде.

Смежные вопросы