是否可以使用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
答案 0 :(得分:0)
修改强>
我在下面的陈述中错了。我终于回过头来,在我测试的类中测试protected
方法的所有单元测试中使用关键字internal virtual
。 DOES 在结构图中工作,这是我收到错误的唯一原因。
我根据以下帖子重新进行了单元测试: