是否可以使用 StructureMap.AutoMocking 中提供的自动模拟框架来测试 CUT 中的内部虚拟方法?我已将 InternalsVisibleTo 添加到相应的 AssemblyInfo.cs 文件中。这是我正在尝试做的事情:
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();
}
我已经知道将内部方法更改为公共工程,但我不认为这是执行此测试的可接受方式。也许我错过了关于 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