Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon 嘲笑异常时,是否有任何常见的陷阱


嘲笑异常时,是否有任何常见的陷阱


当使用Mockito与模拟例外情况时,几个常见的陷阱可以使您的测试效率降低或更难维护。以下是其中一些陷阱以及如何避免它们:

1。过度隔离**

最重要的陷阱之一是过度岩石。当您嘲笑太多依赖项时,就会发生这种情况,从而导致脆弱且难以维护的测试。过度嵌入可能会导致测试更多地关注模拟,而不是对正在测试的系统的实际行为。为了避免这种情况,请专注于仅嘲笑具有非平凡行为的合作者或您想验证的相互作用的合作者。使用实际实例进行简单的协作[3]。

2。异常无效**

Mockito确保抛出的例外对于特定的固执方法有效。如果您尝试抛出该方法检查的异常列表中未出现的异常,则Mockito会抱怨。例如,如果方法未声明“ IOException”,则试图嘲笑它以扔`ioexception'会导致错误[1]。始终确保模拟的异常对该方法有效。

3。使用`thenthrow()`带有void方法**

`当()。thenthrow()`不能用void方法使用,因为没有返回值可以模拟。而是将`dothrow()`用于void方法。错误地混合这些方法会导致错误[2]。

4。缺乏特异性**

在嘲笑例外时,要确定您正在测试哪些例外是至关重要的。通过关注与测试方案相关的例外,避免过度嵌入。这有助于将测试集中到可维护[2] [8]。

5。执行不正确的处理**

即使在测试期间被嘲笑时,应用程序代码也准备正确处理异常。这包括测试处理异常的逻辑,以确保其行为如预期的[2]。

6。使用有意义的错误消息**

嘲笑异常时,请包括有意义的消息,以帮助诊断问题,如果测试失败。这种做法提高了测试的清晰度和有效性[2]。

7。测试异常处理逻辑**

确保代码按预期处理异常。这涉及验证当异常时的应用程序正确行为,这对于构建弹性应用至关重要[2]。

8。重置和清除模拟**

Mockito提供了``reset()和`clearInvocations()`用于管理模拟的功能了。但是,这些应谨慎使用。重置模拟只能在极少数情况下进行,例如当一个容器注入模拟并且不能为每个测试重新创建模拟时。如果重新创建模拟会导致大量的开销,清除调用可能会很有用[1]。

通过意识到这些陷阱并遵循最佳实践,您可以有效地使用Mockito来模拟例外,并确保您的测试可靠和可维护。

引用:
[1] https://www.toptal.com/java/a-guide-to-everyday-mockito
[2] https://www.browserstack.com/guide/mockito-throw-exception
[3] https://javanexus.com/blog/avoiding-mockito-testing-pitfalls
[4] https://stackoverflow.com/questions/9186604/mockito-exception-when-when-requires-requires-an-argument-th------------------ wher-to-be-a-be-a-a-a-a-a-a-method-call-on-on-on-on-on
[5] https://stackoverflow.com/questions/22540108/best-practices-with-mockito
[6] https://stackoverflow.com/questions/52512548/mock-mock-method-to-do-not-not-throw-an-exception/52514628
[7] https://contributors.scala-lang.org/t/mockito-testing-nulls-and-exceptions/3915
[8] https://www.janbasktraining.com/community/java/throw-checked-exceptions-from-mocks-with-mockito