Moq验证不起作用,因为它看起来应该是

时间:2015-11-16 10:04:49

标签: c# moq

我的代码中的测试中包含以下代码。请注意,这个测试不是我写的,它调用的代码也不是我编写的,但我已经改变了。

        mockedIMessage.Setup(m => m.ScriptMethodInvoker(EnumFunction.MsgFullSetPosition, It.IsAny<Result>())).Returns(1).Verifiable();
        var result = GetTestExecutionResult(script);
        mockedIMessage.Verify(m => m.ScriptMethodInvoker(EnumFunction.MsgFullSetPosition, It.IsAny<Result>()), Times.Once);

在原始代码上,这是有效的。在我的,它没有 - 它告诉我模拟的预期调用是0次,而不是曾经预期的。

然而,当我在调试模式中执行它时,它肯定会调用此代码,并在不抛出异常的情况下完成。因此代码似乎有效,但是Moq没有检测到它已被调用。

1 个答案:

答案 0 :(得分:1)

根据您提供的内容,可能会出现多个错误:

  • 确保您在模拟的ScriptMethodInvoker()实例
  • 上调用IMessage
  • 如果ScriptMethodInvoker()有重载,请确保调用正确的
  • 确保EnumFunction是枚举
  • 如果EnumFunction不是枚举,请确保EnumFunction.MsgFullSetPosition始终返回相同的实例
  • 确保GetTestExecutionResult()实际上拨打ScriptMethodInvoker()