NSubstitute VerifyAll等效

时间:2013-02-07 11:02:51

标签: unit-testing mocking moq nsubstitute

NSubstitute是否与MOQ的VerifyAll电话相同?我想验证我希望在所有替代品中接收的所有调用实际上都被调用,理想情况是在单个TearDown方法中调用。我目前正在测试中单独验证每个接听的电话,这并不理想。对于初学者来说,如果没有单独明确验证,那么在替代品上设置但实际上没有被调用的任何调用都将通过网络传播。

3 个答案:

答案 0 :(得分:6)

你所描述的是严格模拟的行为。根据定义,严格的模拟只允许您明确配置和期望的内容。这会产生非常脆弱的测试,当你的代码发生变化时往往会经常破坏,因此如果不鼓励使用严格的模拟,并且不受NSubstitute或FakeItEasy等新框架的支持。

我建议只为每个需要验证的方法创建两个测试:一个测试验证某个方法 被调用,然后是另一个,在同一场景下验证其他方法未被调用。因此,如果您的逻辑发生更改,并且其中一个方法在应该调用/未调用时,您将只会打破一个测试。

答案 1 :(得分:5)

NSubstitute适用于AAA风格测试,不适用于录制/重播。因此,它不支持它们。

答案 2 :(得分:1)

我知道这已经很老了,我不确定我在Loose vs Strict的哪一方面,但对于NSubstitute,你可以通过以下方式实现这一点(xUnit样式):

Assert.Empty(_logger.ReceivedCalls());

它向您显示特定模拟所有已接收的呼叫,因此您可以确保此数字为0.这可能是比以前更新的功能,但是要确保它在那里! :)