任何人都可以解释为什么以下测试失败了吗?
Assert和Verify都失败了。
public interface ISomeInterface { }
[TestMethod]
public void FailingTest()
{
var mock = new Mock<ISomeInterface>();
mock.Setup(m => m.GetHashCode()).Returns(42);
int hashCode = mock.Object.GetHashCode();
mock.Verify(m => m.GetHashCode(), Times.Once());
Assert.AreEqual(42, hashCode);
}
答案 0 :(得分:2)
当你创建一个Mock时,它会创建2个内部事物 - Proxy,(由Castle框架生成),它可以强制转换为你的接口,并由Object属性和Interceptor公开,它将根据你拥有的接口注册调用。
在您的方案中,方法GetHashCode不是界面的一部分,当您调用
时int hashCode = mock.Object.GetHashCode()
拦截器无法捕获此调用,因为它的配置基于声明的接口。听起来你正在调用代理的GetHashCode而不是你的模拟界面。如果您尝试将GetHashCode方法添加到接口,则将传递测试。