执行的最小起订量验证不起作用

本文关键字:验证 不起作用 执行 | 更新日期: 2023-09-27 18:10:48

我试图模拟我的内部虚拟方法。当我调试时,我可以看到我到达了我期望的地方,我的内部虚拟方法被执行,但测试失败了。此外,我验证了'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());
};

我很感激你的帮助。

亲切的问候。

执行的最小起订量验证不起作用

我不确定您的代码是否编译,但我认为由于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());
}