0

我已经运行 EclEmma 来覆盖我的 JUnit 测试用例,并且已经达到了 100%。但是,在覆盖率为 82% 或 95% 的那些上,我的代码旁边有一条消息说“错过了 2 个分支中的 1 个”,我似乎无法解决这个问题。

在查看了我的课程后,我注意到这条消息只出现在我的 if 语句旁边,这就是让我的测试无法 100% 覆盖的原因。

我想我是在问是否有人知道如何在 JUnit 中测试 if 语句,这样就不会错过任何一个分支。

这是我要测试的代码:

private double height;
    public void setHeight(double height){
        if(height <=0){
            this.height = 0;
        }
        else{
            this.height = height;
        }
    }//method close

(我正在使用 JUnit 4)

4

2 回答 2

5

简单的:

希望在被测方法中的每个路径都有一个不同的测试用例;像:

  • testSetHeightWithNegativeValue()
  • testSetHeightWithZeroValue()
  • testSetHeightWithPositiveValue

它们中的每一个都为您的测试方法提供特定的输入,并检查预期的输出。

这里真正的收获是:考虑考虑您的代码。您不需要覆盖工具来确定您需要对您的方法进行更多测试。相反:你看看你的方法,想想它在做什么;然后你写测试用例。

覆盖范围可以告诉您您做了正确的事情;但“做正确的事”是你自己应该努力去做的;而不是满足一些数字。

并且,正如评论所指出的:考虑使用TDD方法:当您在创建“匹配”的生产代码之前编写测试时,您将“思考”部分作为工作过程的基本要素。

于 2017-03-07T07:31:22.817 回答
1

你的代码

public void setHeight(double height){
    if(height <=0){
        this.height = 0;
    }
    else{
        this.height = height;
    }
}

有两个可能的分支:

height <= 0

public void setHeight(double height){
     this.height = 0;
}

height > 0

public void setHeight(double height){
    this.height = height;
}

因此,在 if 语句中,您可以转到else. 您必须创建两个单元测试以涵盖所有可能的方式 - 一个用于传递参数height > 0,第二个用于height <= 0

于 2017-03-07T07:33:57.867 回答