如何测试方法中捕获的异常?

时间:2014-10-22 17:50:21

标签: java unit-testing junit junit4

所以我写了一个看起来像这样的临时方法:

public void tempMethod(String invalidCode) {
        try {
            long temp = Long.valueOf(invalidCode);
        } catch (NumberFormatException ex) {
            System.err.println("Wrong code format, code must contains numbers only. Your wrong code: " + invalidCode);
        }
    }

我想用JUnit 4.10为它编写测试。问题是我在网上找到的解决方案无法测试它。我现在还没有写过任何测试,所以问题可能是愚蠢的。

以下是我的尝试:

@Test(expected = NumberFormatException.class)
    public void testEx() {
        testInstance.tempMethod("asd");
    }

这表示测试失败,但输出中出现异常消息。我尝试使用

进行测试
@Rule
public ExpectedException expectedEx = ExpectedException.none();

但这也不适合那种情况。

是否可以选择在不更改tempMethod正文的情况下检查此方法?

2 个答案:

答案 0 :(得分:2)

您的方法不会抛出异常,这就是测试失败的原因。

你看,当在方法中抛出并捕获异常时,你实际上已经处理了异常:程序员认为这个异常并不重要,只是打印它而不抛出它进一步或停止执行。

因此,测试此问题的唯一方法是检查标准错误流,以查看是否已将相应的字符串写入其中。 <{1}}块关闭后,异常就消失了。

答案 1 :(得分:1)

正如你自己指出的那样,测试失败了,因为你没有抛出异常,你在方法中捕获了它。

无论如何,你的方法应该返回一些东西或者有一些副作用(当它成功完成并且它捕获异常时很可能是另一个),否则它不会做任何事情。这就是你应该测试的。

相关问题