Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Mockito的重置方法与清除杂种有何不同


Mockito的重置方法与清除杂种有何不同


Mockito提供了两种方法,可用于在测试过程中管理模拟状态:`reset()和`clearInvocations()`。尽管两种方法都用于管理模拟状态,但它们具有不同的目的,并且对模拟有明显的影响。

Mockito的`reset()`方法

Mockito中的`reset()`方法用于完全重置模拟对象。这意味着它不仅清除了调用计数,而且还可以消除模拟上设置的任何固执。这可能是有问题的,因为如果您想维护测试的特定行为,则需要在重置该模拟后重新安装模拟。通常不建议使用`reset()`,因为它会导致复杂且集中较少的测试。建议避免使用`reset()`除非绝对必要,因为它可能掩盖了您的测试意图并使它们更难维护[1] [5] [7]。

Mockito的`clearInvocations()`方法

在Mockito 2.1中引入的``clearInvocations()`方法使您可以清除模拟的调用计数,而无需重置其固执。这意味着您可以继续使用相同的存根,同时确保每个测试都以有关方法调用的清洁板开始。当您需要在状态场景中或使用依赖项注入框架时验证交互作用时,此方法很有用,但仍应谨慎使用。通常建议避免使用`clearInvocations()`,除非有必要,因为如果不进行周到的测试,它也会使测试复杂化[1] [4] [9]。

###密钥差异

- 固定:`reset()`删除了所有固执,要求您重新安装模拟,而``clearInvocations''subbing完整。
- 调用计数:两种方法都清除调用计数,但是`reset()`作为完整重置的一部分做到了,而``clearInvocations()

`''
''''receet()
``''``'''
 - 测试复杂性:如果不仔细使用,这两种方法都可以导致更复杂的测试,但是`reset()`倾向于引起更多问题,因为需要重新安装模拟。

总而言之,虽然两种方法都可以用来管理模拟状态,但`reset()``更具侵入性且普遍灰心,而``clearInvocations()
''''''''''''''some He to taginal of to''是更有针对性的,但仍应明智地使用以维持干净和专注的测试。

引用:
[1] https://softwareengineering.stackexchange.com/questions/188299/is-this-this-an-apprep--use-use-ockitos-reset-method
[2] https://www.lambdatest.com/automation-testing-testing-advisor/selenium/methods/org.mockito.internal.mockitocore.clearinvocations
[3] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.internal.mockitocore.clearallcaches
[4] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.mockito.clearinvocations
[5] https://stackoverflow.com/questions/19441538/what-is-the-correct-anternative-to-resetting-a-a-mock-mock-setup in-mockito
[6] https://reflectoring.io/clean-unit-tests-with-mockito/
[7] https://stackoverflow.com/questions/30081161/mockito-does-verify-method-reboot-reboot-number-number-times
[8] https://javadoc.io/doc/org.mockito/mockito-core/2.25.1/org/mockito/mockito.html
[9] https://wesome.org/mockito-3-clear-invocations
[10] https://github.com/mockk/mockk/discussions/842