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语句谢谢。我希望有办法看到他们。唉,我将生活在肮脏的原木中。是的,这些都是我能想到的“简单”的异常处理示例,而不是真正的代码。