2

どうしようか頭を悩ませています。

Foo2 つの仮想メソッドを持つ具象クラスがExecute()あり、GetFile(). Execute()を呼び出しますGetFile。その場合、テスト可能な方法で適切に処理されるはずのいくつかGetFile()の異なる例外がスローされることを確認したいと思います。Foo

Foo単体テストでは、キャッスル プロジェクトからDynamicProxy< > をインスタンス化しGetFile()て例外をスローし、DynamicProxy オブジェクトのExecute()メソッドを呼び出して結果をテストすることを想定していますが、これを行う方法がわかりません。

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

4

1 に答える 1

2

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

Moqを使用した例を次に示します (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あります。

期待値がメンバーをオーバーライドしない場合は、基本クラスの実装を呼び出します (別名、Rhino モックの「部分モック」): デフォルトは false です。

于 2012-04-26T16:12:27.350 に答える