Lambda表达条件的代码覆盖率的单元测试

时间:2017-02-27 20:36:45

标签: java unit-testing lambda

我正在使用SonarQube进行静态代码分析,并且由于无法检查第三方库的if条件的备用条件而引发了一个问题:

CountDownLatch connectedSignal = new CountDownLatch(1);
zookeeper = new ZooKeeper(connectionString,this.sessionTimeout, event -> {
if (event.getState() == KeeperState.SyncConnected) {
      connectedSignal.countDown();
}});

connectedSignal.await();

Sonarqube的错误: “需要通过单元测试再覆盖1个分支,以达到65.0%分支覆盖率的最低阈值。”这是因为我没有覆盖单位测试案例中的否定if条件。问题是,如何在我的单元测试用例中为上述if条件生成否定测试用例?

1 个答案:

答案 0 :(得分:1)

通过将keeperstate传递给方法并从方法外部设置不同的keeperstate以测试负的if条件来解决。

public ZooKeeper connect(String connectionString, 
        String sessionTimeout, KeeperState keeperState) {
        zookeeper = new ZooKeeper(connectionString,sessionTimeout, event -> {
                 if (event.getState() == keeperState) {
                    connectedSignal.countDown();
                 }
              }
        );

        connectedSignal.await(this.sessionTimeout, TimeUnit.MILLISECONDS);
    }