【发布时间】:2016-05-31 15:24:13
【问题描述】:
我正在为使用JUnit 的方法编写测试用例,并且我试图覆盖null 条件以获得更好的分支覆盖率。问题是如果我将null 作为参数传递,测试用例会抛出NullPointerException,这很明显,但是我将如何覆盖Null 条件的分支覆盖率。 path 是一个 String 参数,我想在 if( path != null && path.length() > 0 ) 中介绍它。我还没有写一个完整的测试用例,但我很困惑如何为null 条件写一个。
待测方法
public String translateWebContextPathToVersionNo( String path ) {
path = path.replaceAll( Constants.CONTEXT_PATH_ROS_PRODUCER_PROCESSOR, "" );
path = path.replaceAll( Constants.CONTEXT_PATH_ROS_CONSUMER_PROCESSOR, "" );
if( path != null && path.length() > 0 ) {
String endChar = path.substring( path.length() - 1 );
if( endChar.matches( pattern ) ) {
path = path.substring(0, path.length() -1 );
}
}
return path;
}
JUnit 测试
@Test
public void testTranslateWebContextPathToVersionNo() throws Exception {
TestQuartzROSServiceContextUtil util = new TestQuartzROSServiceContextUtil();
util.translateWebContextPathToVersionNo(null);
}
提前致谢
【问题讨论】:
-
明知不可能为空,为什么还要检查它是否为空?要么将空检查移到方法的开头,要么放弃它。
-
@马克和汤姆。这就是我问这个问题的原因。我知道它的行为,但我仍然必须为它写一个
JUnit,我得到了path != null50% 的分支覆盖率,我想知道如果它是null。 -
正如@MarkChorley 所说,
path不能 在该行为空。如果你想捕捉一个空输入,它必须在方法的开头。 -
你正在尝试做不可能的事情。