在传统的Hamcrest比赛中使用MockitoHamcrest提供了几个优点,尤其是在与Mockito合作进行单位测试时。这是关键好处:
1。与Mockito的集成:MockitoHamcrest允许您无缝将Hamcrest匹配器与Mockito的模仿框架集成。这种集成对于建立使用复杂的参数匹配的存根或验证方法呼叫至关重要,而传统的Hamcrest匹配器并非直接支持。例如,您可以使用“ MockitoHamcrest.argthat”将hamcrest匹配器转换为摩a的匹配器,从而使您能够在Mockito上下文中使用Hamcrest的丰富匹配器[1] [10] [12]。
2。避免版本不兼容:Mockito是在2.1.0版中与Hamcrest分离的,以避免版本不兼容,这些版本过去曾为用户造成问题。 MockitoHamcrest提供了一种使用Hamcrest匹配器的方法,而无需与特定版本的Hamcrest相关,从而减少了潜在的冲突[1] [10]。
3。参数匹配中的灵活性:MockitoHamcrest允许您使用Hamcrest的灵活和表现力的匹配器来定义复杂的参数匹配场景。当您需要验证使用与某些条件匹配的参数(例如包含特定子字符串或数字在一定范围内的字符串)[4] [12]时,这一点特别有用。
4。提高的可读性和自我纪录的代码:通过使用MockitoHamcrest使用Hamcrest匹配器,您的测试可以保持自我日志记录且易于阅读。匹配者清楚地表达了测试的目的,使开发人员更容易理解正在测试的内容而无需其他评论[3] [9]。
5。更好的错误消息:当断言失败时,Hamcrest提供了详细且有意义的错误消息,这可以大大有助于调试。使用MockitoHamcrest时,这特别有益,因为它有助于确定模拟验证失败的原因,从而更容易诊断问题[3] [9]。
6。自定义和可扩展性:Hamcrest的Matcher API允许您创建根据特定测试需求量身定制的自定义匹配器。当与MockitoHamcrest结合使用时,这种可扩展性使您能够编写更多针对性和表达的测试,使您的应用程序的逻辑完全匹配[6] [9]。
总而言之,MockitoHamcrest提供了Mockito的模拟能力与Hamcrest的灵活和表现力的匹配器的强大组合,从而增强了测试可读性,灵活性和可维护性。
引用:[1] https://site.mockito.org/javadoc/current/org/mockito/mockito/hamcrest/mockitohamcrest.html
[2] https://stackoverflow.com/questions/20441594/mockito-and-hamcrest-how-how-to-verify-verify-collection-collection-argument
[3] https://automatenow.io/complete-guide-to-hamcrest-matchers/
[4] https://www.lambdatest.com/automation-testing-testing-advisor/selenium/methods/org.mockito.hamcrest.mockitohamcrest.mockitohamcrest
[5] https://www.javadoc.io/doc/org.mockito/mockito-core/2.2.9/org/mockito/argumentmatcher.html
[6] https://www.javacodegeeks.com/2015/11/custom-hamcrest-matchers.html
[7] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.mockito.hamcrest.mockitohamcrest
[8] https://site.mockito.org/javadoc/current/index.html?org%2fmockito%2fargumentmatcher.html
[9] https://www.vogella.com/tutorials/hamcrest/article.html
[10] https://weblab.tudelft.nl/docs/mockito/3.10/org/mockito/mockito/hamcrest/mockitohamcrest.html
[11] https://truth.dev/comparison.html
[12] https://stackoverflow.com/questions/8348046/mockitos-matcher-vs-hamcrest-matcher