0

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

我会很感激任何帮助。

亲切的问候。

4

1 回答 1

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());
}
于 2013-04-25T17:35:43.150 回答