最小起订量验证不工作,因为它看起来应该是

Moq verify is not working as it looks like it should be

我的代码测试中有以下代码。注意这个测试不是我写的,它调用的代码也不是我写的,但是我改了。

        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 没有检测到它已被调用。

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

  • 确保您在模拟的 IMessage 实例
  • 上调用 ScriptMethodInvoker()
  • 如果 ScriptMethodInvoker() 有重载,确保调用正确的
  • 确保 EnumFunction 是一个枚举
  • 如果 EnumFunction 不是一个枚举那么确保 EnumFunction.MsgFullSetPosition 总是 returns 同一个实例
  • 确保 GetTestExecutionResult() 实际调用了 ScriptMethodInvoker()