Mockito的`reset()`方法是一个功能,它允许您重置模拟对象,以便可以重复使用。但是,Mockito开发人员和用户通常不建议使用它的使用,因为它表明设计较差的测试或代码过于复杂且难以清洁[7] [9]。相反,推荐的方法是为每种测试方法创建新的模拟,以确保测试中的独立性和清晰度[7] [9]。
###与其他模拟库的比较
1。Jmock2:与Mockito不同,JMock2使用上下文来管理期望和模拟信息,这是为每种测试方法重建的。这意味着JMock2不需要像Mockito一样明确重置[10]。 JMock2的方法有助于保持测试隔离,而无需手动重置模拟。
2。EasyMock:EasyMock通常也不需要重置方法。它旨在为每个测试创建新的模拟对象,类似于使用Mockito推荐的实践。 Mockito开发人员Szczepan Faber提到他在使用EasyMock时不需要重置功能[8]。
3. Mockito vs.其他库:通常,通过自动管理模拟状态或鼓励为每个测试创建新模拟,例如JMOCK2和EASYMOCK(例如JMock2和Easymock)促进了清洁的测试方法。 Mockito的`reset()`方法更多是一个例外,而不是嘲笑框架的规范。
###最佳实践
- 避免使用`reset()`:除非绝对必要,例如当一个容器注入模拟并且不能为每个测试重新创建模拟时,建议避免使用`reset()''。取而代之的是,针对每种情况的新模拟创建简单,集中的测试[7] [9]。
- 使用`clearInvocations()`:如果您需要清除相互作用而不重置固执,请使用`clearInvocations()`。此方法使您可以在清除任何记录的交互作用时保持固执,这在某些情况下可能很有用[5]。
- 重构代码可测试性:如果您发现自己需要使用`reset()````经常'',这可能表明您的代码可能会受益于重构以使其更具测试。这可能涉及分解复杂方法或改善依赖注入[9]。
总而言之,虽然Mockito提供了一个`reset()`方法,但通常不鼓励使用它的使用,而不是为每个测试创建新的模拟。其他模拟图书馆通常会促进类似的实践,强调对复杂模拟管理的清洁和独立测试。
引用:[1] https://www.tutorialspoint.com/mockito/mockito_resetting_mock.htm
[2] https://groups.google.com/g/mockito/c/y_ihdc8lx_m
[3] https://www.vogella.com/tutorials/mockito/article.html
[4] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.mockito.reset
[5] https://www.toptal.com/java/a-guide-to-everyday-mockito
[6] https://www.jrebel.com/blog/mock-unit-testing-with-mockito
[7] https://stackoverflow.com/questions/34412106/apprep-use-use-of-mockito-reset
[8] https://groups.google.com/g/mockito/c/_vxg33tlzl8
[9] https://softwareengineering.stackexchange.com/questions/188299/is-this-this-an-apprep--use-use-use-ockitos-reset-method
[10] https://stackoverflow.com/questions/18164123/how-to-clean-up-mocks-in-spring-tests-when-using-using-susing-susing-mockito