4

私のWidgetDoerクラスは、注入されていないFooに依存します。 _fooの実装がDoStuffWith()であることを偽造する必要があります(結果がDo()であることを確認してください - これは実際のコードの単純化された表現です)。Typemockアイソレータ:注入されていない依存関係をモックしますか?

public class WidgetDoer { 
    readonly Foo _foo; 

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

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

私は(WidgetDoer()コンストラクタ内)に作成されることから、実際のFooオブジェクトを防ぐために、次のアイソレータの構文を使用しようとしましたが、本当のFooオブジェクトはとにかくインスタンス化されます。

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

私が使用できますTypemockは注入されていない依存関係を模倣するか?

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

は、TypeMock supports very few types from mscorlibを忘れないでください:

答えて

4

このコードは私が結合された依存関係を模擬することができました。

0

まず、TypeMock IsolatarのAPIを扱うとき、私は非常にあなたの側でこの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

とその後の1はまた、これを行うことができます。

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

これは、将来のすべてのオブジェクトの作成を偽に置き換えます。これは、オブジェクトの作成が何回起こるかが明白でないコードを見ている場合に非常に便利です。

2

私はTypemockで働いています。

インスタンスの交換はしばらく進んでいません。 あなたは使用することができます。

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

fakeFooは、あなたのコード内で_FOOするプロキシです。

また、使用することができます。

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

ここfakeFooは、上のこの行から(新しい)作成のFooのすべてのインスタンスへのプロキシです。

どちらの例は、と「スワップ」それ一つのコマンドで作成します。