最小起订量验证不工作,因为它看起来应该是
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()
。
我的代码测试中有以下代码。注意这个测试不是我写的,它调用的代码也不是我写的,但是我改了。
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()
有重载,确保调用正确的 - 确保
EnumFunction
是一个枚举 - 如果
EnumFunction
不是一个枚举那么确保EnumFunction.MsgFullSetPosition
总是 returns 同一个实例 - 确保
GetTestExecutionResult()
实际调用了ScriptMethodInvoker()
。
ScriptMethodInvoker()