0

StructureMap.AutoMocking で提供される自動モッキング フレームワークを使用して、CUT 内の内部仮想メソッドをテストすることは可能ですか? 適切な AssemblyInfo.cs ファイルに InternalsVisibleTo を既に追加しています。これが私がやろうとしていることです:

public ClassA {
    public void Method1() { Method2(); }
    internal virtual void Method2() { /* do work */ }
}

[Test]
public void TestClassA() {

    // Arrange
    var mockedClass = new RhinoAutoMocker<ClassA>();
    mockedClass.PartialMockTheClassUnderTest();
    mockedClass.ClassUnderTest.Expect(x => x.Method2());

    // Act
    mockedClass.ClassUnderTest.Method1();

    // Assert
    mockedClass.ClassUnderTest.VerifyAllExpectations();
}

内部メソッドを public に変更することがうまくいくことは既に知っていますが、これがこのテストを実行するための受け入れ可能な方法だとは思いません。おそらく、RhinoMocks と StructureMap が相互作用する方法について基本的なことを見逃しているかもしれませんが、私が書いた他の単体テストに基づいて、このタイプのものが機能するはずであると考えました。

編集これを試したときに表示されるエラーメッセージを提供すると役立つと思います。

System.InvalidOperationException : Invalid call, the last call has been used or no call       
has been made (make sure that you are calling a virtual (C#) / Overridable (VB) 
method).
at Rhino.Mocks.LastCall.GetOptions()
at Rhino.Mocks.RhinoMocksExtensions.Expect(T mock, Func`2 action)
at Rhino.Mocks.RhinoMocksExtensions.Expect(T mock, Action`1 action)
at ClassATest.TestClassA() in ClassA.cs      
4

1 に答える 1

0

編集 私は以下のステートメントで間違っています。最後にこれに戻り、テスト対象のクラス内のメソッドprotectedをテストするすべての単体テストでキーワードを使用しました。internal virtualこれは構造マップで機能し、私が受け取っていたエラーを受け取った唯一の理由です。

これについて少し調べたところ、StructureMap.Automocker 経由ではアクセスできない Rhino.Mocks の要素がいくつかあるようです。Rhino.Mocks フレームワークのみを使用するように単体テストを作り直したところ、「内部仮想」メソッドをテスト ランナーに公開することができました。理想的な状況ではなく、StructureMap の新しいバージョンでこれがサポートされることを望んでいますが、「内部仮想」メソッドのサポートを追加する前に、他にもっと重要なことがあれば、それはずっと先のことかもしれません。

次の投稿に基づいて単体テストを作り直しました。

http://ayende.com/Wiki/Rhino+Mocks+-+Internal+Methods.ashx

Rhino.Mocks で保護された仮想メンバーをモックする方法は?

于 2013-01-31T14:57:54.747 に答える