java - 如何断言异常被捕获?

标签 java junit exception

我知道如何断言抛出异常。但是,我如何断言异常被抛出并被成功捕获?例如,假设我有一个方法应该为无效输入抛出特定类型的异常

public static void myMethod(String value) {
    try {
        someExternalMethod(value);// can throw IllegalArgumentException
    } catch (IllegalArgumentException e) {
        System.out.println("Let me handle it differently");
    } catch (Exception e) {
        System.out.println("Not IllegalArgumentException");
    }
}

现在我想断言,对于某些值,该方法确实抛出了“IllegalArgumentException”,而不是其他一些异常。

最佳答案

在测试的上下文中myMethod你不能(更重要的是,你不应该)检查 someExternalMethod扔了IllegalArgumentException .事实上,你对 myMethod 的测试不应假定调用 someExternalMethod已完成:它是 myMethod 的实现细节.

原因myMethod捕获这些异常是为了对调用者隐藏它们。您应该通过传递导致它们的值并验证在这两种情况下都没有抛出任何内容来检查是否对您隐藏了这些异常。

测试 someExternalMethod ,以及它抛出的异常,是通过测试 someExternalMethod 完成的任务, 不是 myMethod .

关于java - 如何断言异常被捕获?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25761221/

相关文章:

java - 处理字节数组产生奇怪结果的字符串构造函数

unit-testing - 如何从命令行运行 JUnit 测试用例

c# - 带有 foreach 的 IndexOutOfRangeException

java - PermGen 空间错误 - Glassfish 服务器

java - JavaFX 2 小程序能否请求焦点并因此关注浏览器/选项卡?

java - 即时与 ZoneDateTime。转换到另一个时区

java - keep-alive 是否始终在使用 httpclient 的请求中发送以及如何防止发送它

java - JMockit模拟目标类的方法

azure - 需要在电子邮件通知中发送发布测试结果图表

python - 为什么我的 Python 异常没有被重新引发?