【发布时间】:2009-12-30 13:04:41
【问题描述】:
使用起订量时,我遇到了一个非常奇怪的问题,即只有当我设置的方法是公开的时,模拟上的设置似乎才有效。我不知道这是 Moq 错误还是我只是有这个错误(Moq 的新手)。这是测试用例:
public class TestClass
{
public string Say()
{
return Hello();
}
internal virtual string Hello()
{
return "";
}
}
[TestMethod]
public void Say_WhenPublic_CallsHello()
{
Mock<TestClass> mock = new Mock<TestClass>();
mock.Setup(x => x.Hello()).Returns("Hello World");
string result = mock.Object.Say();
mock.Verify(x => x.Hello(), Times.Exactly(1));
Assert.AreEqual("Hello World", result);
}
失败并显示此消息:
Say_WhenPublic_CallsHello 失败:Moq.MockException: 未在模拟上执行 1 次调用:x => x.Hello() 在 Moq.Mock.ThrowVerifyException(预期 IProxyCall,表达式表达式,Times 次)...
如果我像这样公开 Hello 方法,则测试通过。这里有什么问题?
public virtual string Hello()
{
return "";
}
提前致谢!
【问题讨论】:
-
投票否决,因为当前版本的 Moq 中不再存在该行为。它现在能够处理内部的非虚拟属性和方法。
-
与其投票否决(以及任何相关的答案),不如您提供引入此功能的最小起订量版本号,我们将进行相应的编辑。投票反对并没有真正实现任何目标。 Q 和 A 对于没有此功能的 Moq 版本仍然有效。
标签: c# .net mocking moq verify