Mockito lenient() 何时使用
Mockito lenient() when to use
据我了解,lenient
消除了 StrictStubbing 抛出的异常。基于此,不应使用 lenient
,可能只是在执行 TDD 时临时使用,因为严格的存根异常通常意味着您的代码错误、测试设计不当或您正在添加不必要的行。
是否存在 lenient
实际需要或对测试有用的实际场景?
例如,如果您需要在短时间内从 Mockito 1 迁移到 Mockito 2(后者引入了严格存根),它就非常有用。
我刚刚发现了一个不寻常的有效用法。我们进行了代码更改,默认情况下禁用了一项功能(在未来的版本中将其完全删除之前)。我们需要测试禁用是否真的有效,所以我们需要模拟一些标志为 false。然而,我们还需要模拟一些其他值,因为如果禁用该功能的代码(测试该标志)以某种方式被破坏,该功能的默认设置将导致它无论如何都不做,所以我们不会无法观察标志的失败。
总结一下:在成功的情况下,我们会通过模拟获得 UnnecessaryStubbingException,但如果没有它,失败的情况实际上不会失败。因此,我们将这些特定的嘲笑标记为宽松。
引入了 Strict Stubbing 来检测不必要的存根并编写更清晰的测试。
如果您遇到异常,重点应该放在改进测试用例上,而不是绕过严格的存根检查。
据我了解,lenient
消除了 StrictStubbing 抛出的异常。基于此,不应使用 lenient
,可能只是在执行 TDD 时临时使用,因为严格的存根异常通常意味着您的代码错误、测试设计不当或您正在添加不必要的行。
是否存在 lenient
实际需要或对测试有用的实际场景?
例如,如果您需要在短时间内从 Mockito 1 迁移到 Mockito 2(后者引入了严格存根),它就非常有用。
我刚刚发现了一个不寻常的有效用法。我们进行了代码更改,默认情况下禁用了一项功能(在未来的版本中将其完全删除之前)。我们需要测试禁用是否真的有效,所以我们需要模拟一些标志为 false。然而,我们还需要模拟一些其他值,因为如果禁用该功能的代码(测试该标志)以某种方式被破坏,该功能的默认设置将导致它无论如何都不做,所以我们不会无法观察标志的失败。
总结一下:在成功的情况下,我们会通过模拟获得 UnnecessaryStubbingException,但如果没有它,失败的情况实际上不会失败。因此,我们将这些特定的嘲笑标记为宽松。
引入了 Strict Stubbing 来检测不必要的存根并编写更清晰的测试。 如果您遇到异常,重点应该放在改进测试用例上,而不是绕过严格的存根检查。