【问题标题】:How to get a better branch coverage with Null value如何使用 Null 值获得更好的分支覆盖率
【发布时间】: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 != null 50% 的分支覆盖率,我想知道如果它是null
  • 正如@MarkChorley 所说,path 不能 在该行为空。如果你想捕捉一个空输入,它必须在方法的开头。
  • 你正在尝试做不可能的事情。

标签: java junit cobertura


【解决方案1】:
 path = path.replaceAll( Constants.CONTEXT_PATH_ROS_PRODUCER_PROCESSOR, "" ) 

当 path 为 null 时会抛出 NullPointerException。

为避免这种情况,您应该重构方法并在对 null 对象调用方法之前检查 null。

【讨论】:

  • 感谢 Kofislaper。我想我需要做这样的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-11
  • 2015-02-12
  • 2017-07-31
  • 1970-01-01
  • 2018-10-30
  • 2013-09-12
  • 1970-01-01
相关资源
最近更新 更多