所以我写了一个看起来像这样的临时方法:
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
正文的情况下检查此方法?
答案 0 :(得分:2)
您的方法不会抛出异常,这就是测试失败的原因。
你看,当在方法中抛出并捕获异常时,你实际上已经处理了异常:程序员认为这个异常并不重要,只是打印它而不抛出它进一步或停止执行。
因此,测试此问题的唯一方法是检查标准错误流,以查看是否已将相应的字符串写入其中。 <{1}}块关闭后,异常就消失了。
答案 1 :(得分:1)
正如你自己指出的那样,测试失败了,因为你没有抛出异常,你在方法中捕获了它。
无论如何,你的方法应该返回一些东西或者有一些副作用(当它成功完成并且它捕获异常时很可能是另一个),否则它不会做任何事情。这就是你应该测试的。