我有一个处理异常的方法:
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()))
但它仍会将堆栈跟踪打印到日志中。我更喜欢干净的原木......有什么建议吗?
答案 0 :(得分:1)
如果该方法没有抛出异常,你就不能期望得到一个!
下面的示例如何为抛出异常的方法编写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
}
}
答案 1 :(得分:1)
您无法测试方法在内部执行的操作。这是完全隐藏的(除非有副作用,在外面可见)。
测试可以检查对于特定的输入,该方法返回预期的输出。但你不能检查,这是怎么做的。因此,您无法检测是否存在已处理的异常。
所以:要么不处理异常(让测试捕获异常),要么返回一个告诉你异常的特殊值。
无论如何,我希望你真正的异常处理比你的例子更明智。