执行MOQ验证不起作用

时间:2013-04-25 15:36:07

标签: c# unit-testing moq

我正在尝试模拟我的内部虚拟方法。 当我调试时,我可以看到我到达了我期望的位置,并且我的内部虚拟方法已经完成,但是测试失败了。 此外,我验证了'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());
};

我会感激任何帮助。

亲切的问候。

1 个答案:

答案 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());
}