2012-04-26 5 views
2

これを行う方法を頭で傷つける。キャッスルクラスユニットテストのプロキシ

具体的なクラスFooと2つの仮想メソッドExecute()GetFile()があるとします。 Execute()GetFileとなります。私は、そのときに、GetFile()は、Fooがテスト可能な方法で正常に処理されるはずの異なるいくつかの例外をスローすることを確認したいと思います。私のユニットテストのために

、私は例外をスローし、その後DynamicProxyオブジェクトのExecute()メソッドを呼び出し、結果をテストするためにGetFile()を傍受が、私はできません城プロジェクトから> DynamicProxy < Fooをインスタンス化する想定していますこれを行う方法を参照してください。

これは可能ですか/実用的ですか?その場合、動的プロキシオブジェクトの作成はどのようになりますか?

答えて

2

ほとんどのモックフレームワークがシナリオをサポートしているため、独自のプロキシをハンドコードする必要はありません。ここで

は(部品番号があなたのために内部的に動的なプロキシを作成します)Moqを使用した例です。

public class SomeException : Exception { } 

public class Foo 
{ 
    public virtual int Execute() 
    { 
     try 
     { 
      GetFiles(); 
     } 
     catch (SomeException) 
     { 
      return 1; 
     } 
     return 0; 
    } 

    public virtual void GetFiles() 
    { 
     //... 
    } 
} 

[Test] 
public void FooTest() 
{ 
    var fooUnderTest = new Mock<Foo>(); 
    fooUnderTest.CallBase = true; 
    fooUnderTest.Setup(f => f.GetFiles()).Throws(new SomeException()); 
    var result = fooUnderTest.Object.Execute(); 
    Assert.AreEqual(1, result); 
} 

あなただけCallbase = true意志設定するように注意する必要があります。

のInvoke基本クラスを実装が メンバー(Rhino Mockの「Partial Mocks」とも呼ばれます)を上書きしない場合の実装:デフォルトはfalseです。

+0

優れています。まさに私が探していたもの。 –