Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon 使用Mockito参数匹配器的局限性是什么


使用Mockito参数匹配器的局限性是什么


Mockito参数匹配器是单元测试中使用的强大工具,用于在设置模拟时灵活地指定参数。但是,它们有几个局限性:

1。用法上下文:参数匹配器只能在固执或验证方法的上下文中使用。在测试的对象上调用方法时无法使用它们。例如,当调用真实对象上的方法时,您不能使用`noystring()`;相反,您应该使用具体值[1] [5]。

2。跨参数的一致性:当将参数匹配器用于一个参数时,所有其他参数也必须使用匹配器。在同一方法调用中,您不能将具有具体值的匹配器与具体值混合。这是`ivauseofMatchersException` [7] [8]的常见来源。

3。嘲笑限制:摩根托无法模拟某些方法,例如`equals()`,`hashCode()`或最终方法。虽然可以与可以模拟的方法一起使用参数匹配器,但它们不会扩展模拟这些限制方法的能力[3]。

4。参数匹配器类型:Mockito提供了各种内置的参数匹配器(例如,`anyint()`,'anystring()`,`iSnull()`),但是您必须为参数选择正确的类型。例如,使用原始类型的任何``任何()`可能无法正常工作;相反,使用更具体的匹配器,例如`nyyboolean()`对于布尔参数[7]。

5。自定义参数匹配器:虽然Mockito允许您使用'argthat()`方法创建自定义匹配器,但实现`grigentMatcher`接口需要仔细考虑以确保在不同方案中匹配器的行为如前所述[2] [4]。

6.与其他库集成:将Mockito与Hamcrest(例如Hamcrest)等其他库时,请确保正确处理集成。例如,Sonarqube可能会标记'argthat()`的某些用法,即使Hamcrest Matchers不正确,即使它们是有效的[4]。

总而言之,尽管Mockito参数匹配者是通用的,但它们的用法仅限于特定上下文,并且需要跨方法参数的一致性。此外,他们没有克服摩根图在某些方法或类中的基本局限性。

引用:
[1] https://groups.google.com/g/mockito/c/ul9ymczqnky
[2] https://kenkousen.substack.com/p/tales-from-the-jar-side-a-mockito
[3] https://ioflood.com/blog/mockito/
[4] https://community.sonarsource.com/t/problem-with-java-rule-s6073-mockito-argument-matchers-matchers-in-case-in-case-us-mockitohamcrest-apapter-38429
[5] https://groups.google.com/g/mockito/c/zi6pcqudtco
[6] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.argumentmatchers.isnull
[7] https://stackoverflow.com/questions/16458136/mockito-invalid-use-of-argument-matchers
[8] https://www.baeldung.com/mockito-argument-matchers