0

谁能解释为什么以下测试失败?

断言和验证都失败。

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);
}
4

1 回答 1

2

当您创建 Mock 时,它会创建 2 个内部事物 - 代理(由 Castle 框架生成),它可以转换为您的接口并由 Object 属性和 Interceptor 公开,它将根据您拥有的接口注册调用。

在您的场景中,方法 GetHashCode 不是接口的一部分,当您调用

int hashCode = mock.Object.GetHashCode()

拦截器无法捕获此调用,因为它的配置基于声明的接口。听起来您正在调用代理的 GetHashCode,而不是您的模拟接口。如果您尝试将 GetHashCode 方法添加到接口,测试将通过。

于 2013-09-07T17:22:46.883 回答