我正在尝试模拟我的内部虚拟方法。 当我调试时,我可以看到我到达了我期望的位置,并且我的内部虚拟方法已经完成,但是测试失败了。 此外,我验证了'this'上下文是代理而不是常规类实例。
方法:
public void MyMethod() { MyInternalMethod() }
internal virtual void MyInternalMethod() {}
单元测试:
Because of = () => { myMock.Object.MyMethod() };
It should_run_inner_internal_virtual_MyInternalMethod = () =>
{
myMock.Verify(x => x.MyInternalMethod(),Times.Once());
};
我会感激任何帮助。
亲切的问候。
答案 0 :(得分:0)
我不确定您的代码是否编译,但我认为由于Moq和被测试的类在不同的程序集中,您可能需要告诉正在测试的对象的程序集使Moq的程序集内部可见。 internal只使方法/属性/类对该程序集可见。
尝试将此添加到AssemblyInfo.cs文件中(对于正在测试的程序集)
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
假设DynamicProxyGenAssembly2是您的Moq程序集名称。 如果您的测试也在不同的装配中,那么您还需要使该装配对内部可见。 我刚刚为此编写了一个nunit测试,它通过了。
[Test]
public void ShouldCallMyInternalMethodFromMyMethod()
{
myMock = new Mock<MyClass>();
myMock.Object.MyMethod();
myMock.Verify(mockObj=> mockObj.MyInternalMethod(), Times.Once());
}