5

NSubstitute 是否有相当于 MOQ 的VerifyAll调用?我想验证我希望在所有替代品中收到的所有调用实际上都被调用了,理想情况下是在一个TearDown方法中。我目前正在测试中单独验证每个收到的呼叫,这并不理想。对于初学者来说,任何在替代上设置但实际上并没有被调用的调用如果没有被单独明确地验证,就会漏网。

4

3 回答 3

7

您所描述的是严格模拟的行为。根据定义,严格的模拟只允许您明确配置和期望的东西。这会创建非常脆弱的测试,随着代码的更改,往往会经常中断,因此不鼓励使用 if strict mocks,并且新框架(例如 NSubstitute 或 FakeItEasy)根本不支持。

我建议为您需要验证的每种方法简单地创建两个测试:一个测试验证某个方法是否被调用,然后另一个测试在同一场景下验证其他方法没有被调用。因此,如果您的逻辑发生变化,并且在应该调用/不调用其中一种方法时,您只会破坏一个测试。

于 2013-02-07T12:03:18.370 回答
5

NSubstitute 用于 AAA 风格的测试,而不是用于记录/重放。因此,它不支持它们。

于 2013-02-07T11:19:25.970 回答
2

我知道这已经很老了,我不确定我属于松散与严格的哪一方,但对于 NSubstitute,您可以通过以下方式实现这一点(xUnit 风格):

Assert.Empty(_logger.ReceivedCalls());

它向您显示特定模拟的所有已接电话,因此您只需确保此数字为 0。这可能是比以前更新的功能,但要确保它存在!:)

于 2018-01-26T20:23:28.003 回答