![](/img/trans.png)
[英]How to make a unit test for a method that is catching Exception.class?
[英]Catching Exception with JUnit @Test(expected=Exception.Class)
我使用JUnit编写测试用例,我想抓住的Exception
使用@Test(expected=Exception.Class)
由于某种原因,我无法捕捉到exception
。 如果我传递null
,它将抛出NullPointerException
,并且测试将其捕获,因为Exception
是父类,但是在我的Coverage报告中,该异常仍未被覆盖。
被测方法:
private static final String CONTENT_LENGTH = "Content-Length";
protected long getContentLength( MultivaluedMap<String, String> headers ) {
String length = headers.getFirst( CONTENT_LENGTH );
if( length != null ) {
try {
return Long.valueOf( length );
} catch( Exception e ) {}
}
return 0;
}
JUnit测试用例:
@Test(expected=Exception.class)
public void testGetContentLength() {
new TestBaseMessageBodyReader().getContentLength(null);
}
任何帮助,将不胜感激。
谢谢
捕获通用异常是一种不好的做法,更糟糕的是捕获异常却什么也不做。 在尝试捕获中,您应该捕获NumberFormatException ,这是Long.valueOf可能引发的问题。 即使这样,您的jUnit也不会永远不会捕获异常,因为您正在捕获异常但不对其执行任何操作,因此该方法将始终返回0,因为它当前正在写入(前提是您未传递null)
这是一些可以在单元测试中捕获异常的代码。 我将创建两个单元测试,一个捕获您的第一个异常,另一个捕获第二个。
protected long getContentLength(MultivaluedMap<String, String> headers)
{
if(null == headers)
{
throw new SomeCustomException("some message");
}
Long returnValue = 0;
String length = headers.getFirst(CONTENT_LENGTH);
try
{
returnValue = Long.valueOf(length);
}
catch (NumberFormatException e) {
// if you can recover handle it here
// if you can't recover then break the app
throw new SomeOtherCustomException("some other message");
}
return returnValue;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.