Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon 是否有hamcrest的其他选择可以与Mockito更好


是否有hamcrest的其他选择可以与Mockito更好


与Mockito合作时,Hamcrest通常用于其表现力匹配器,从而增强了测试的可读性。但是,有一些替代方案可以与Mockito搭配得很好,每种方法都有自己的优势和劣势。

Assertj

ASSERTJ是Hamcrest的流行替代方案,用于在单位测试中编写断言。它提供了一种流利的API,许多开发人员比Hamcrest更容易使用,并且更具表现力。对于其可读性和轻松创建自定义断言的能力通常是首选的。尽管Assertj不像Hamcrest那样直接与Mockito集成,但它可以与Mockito一起用于断言,从而使测试更具可读性和可维护性。但是,AssERTJ主要集中于主张,而不是汉克雷斯特的更广泛的匹配能力[1] [3]。

###真相

真理是Google开发的另一个断言库。它提供了类似于ASSERTJ的流利API,但更多地侧重于在IDE中提供更好的自动完成支持,这可能有益于发现可用的断言。真理并不像嘲笑者那样常用于hamcrest,而是用于测试中的断言。像Assertj一样,真理更专注于主张,而不是Hamcrest提供的通用匹配[3]。

Mockito的内置匹配者

Mockito本身提供的匹配器可用于与模拟对象进行固执和验证交互。这些匹配者返回他们匹配的类型(例如,``返回``返回integer'''的任何(integer.class),这与返回``Matcher'''的hamcrest匹配器不同。要使用Mockito使用Hamcrest Matchers,您可以使用``Argthat''或`MockitoHamcrest.argthat`将hamcrest匹配器转换为兼容摩有兼容的形式[7]。

###自定义实现

对于您不希望使用外部库的场景,您可以实现自己的匹配者或断言。这种方法可以完全控制行为和语法,但需要更多的努力和维护。除非您有非常具体的需求,否则通常不建议使用它。

### 结论

尽管Hamcrest由于其灵活性和表现力而被广泛用于Mockito,但诸如Assertj和Thruth等替代方案可以增强测试的主张部分。如果您正在寻找与Mockito良好集成以进行匹配目的的东西,那么Hamcrest仍然是一个不错的选择,但是您可以将其匹配者与其他断言库一起使用,以获得更全面的测试体验。最终,选择取决于您有关可读性,易用性以及在测试中需要执行的断言或匹配的类型。

引用:
[1] https://www.reddit.com/r/java/comments/nj7dvd/who_here_are_are_usion_the_hamcrest_api_and_and_and_why/
[2] https://www.javacodegeeks.com/2015/11/hamcrest-matchers-tutorial.html
[3] https://truth.dev/comparison.html
[4] https://www.reddit.com/r/javahelp/comments/oqz8cn/unit_testing_with_mockito_framework_framework_why_do_do_do_we/
[5] https://www.infoworld.com/article/2257253/junit-5-tutorial-part-part-1-unit-testing-with-junit-5-mockito-5-mockito-and-hamcrest.html
[6] https://softwareengineering.stackexchange.com/questions/447953/447953/alternatives-to-using-mock-libraries-such-asuch-as-as-mockito-in-unit-unit-unit检验
[7] https://stackoverflow.com/questions/8348046/mockitos-matcher-vs-hamcrest-matcher
[8] https://stackoverflow.com/questions/12606196/what-is-the--the----------- used-to-used-the-deprected-hamcrest-method-is