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