Exception 测试“;“已处理的例外情况”;朱尼特
我有一个处理了异常的方法:Exception 测试“;“已处理的例外情况”;朱尼特,exception,junit,Exception,Junit,我有一个处理了异常的方法: public boolean exampleMethod(){ try{ Integer temp=null; temp.equals(null); return }catch(Exception e){ e.printStackTrace(); } } 我想测试一下 public void test_exampleMethod(){} 我试过了 @Rule public
public boolean exampleMethod(){
try{
Integer temp=null;
temp.equals(null);
return
}catch(Exception e){
e.printStackTrace();
}
}
我想测试一下
public void test_exampleMethod(){}
我试过了
@Rule
public ExpectedException expectedException=ExpectedException.none();
public void test_exampleMethod(){
expectedException.expect(JsonParseException.class);
exampleMethod();
}
但这不起作用,因为异常是在内部处理的
我也试过了
@Test(expected=JsonParseException.class)
但同样的问题…异常被处理
我知道我能做到
assertTrue(if(exampleMethod()))
但它仍然会将堆栈跟踪打印到日志中。我更喜欢干净的日志…有什么建议吗?如果该方法未引发异常,则您无法期望得到异常 下面是如何为引发异常的方法编写Junit测试的示例:
class Parser {
public void parseValue(String number) {
return Integer.parseInt(number);
}
}
正常测试用例
public void testParseValueOK() {
Parser parser = new Parser();
assertTrue(23, parser.parseValue("23"));
}
异常的测试用例
public void testParseValueException() {
Parser parser = new Parser();
try {
int value = parser.parseValue("notANumber");
fail("Expected a NumberFormatException");
} catch (NumberFormatException ex) {
// as expected got exception
}
}
您无法测试方法在内部执行的操作。这是完全隐藏的(除非有外部可见的副作用) 测试可以检查对于特定输入,方法是否返回预期的输出。但你不能检查,这是如何做到的。因此,您无法检测是否存在已处理的异常 所以:要么不处理异常(让测试捕获异常),要么返回一个特殊值来告诉您异常
无论如何,我希望您真正的异常处理比您的示例中更合理。您的示例并不复杂,您需要在方法末尾使用return语句谢谢。我希望有办法看到他们。唉,我将生活在肮脏的原木中。是的,这些都是我能想到的“简单”的异常处理示例,而不是真正的代码。