JUNIT测试:如何在不丢失分支的情况下测试语句



我已经在Junit测试案例上覆盖了Eclemma,并且在某些测试用例上最多可达到100%。但是,在覆盖82%或95%的人中,我的代码旁边有一条消息,上面写着"错过了2个分支中的1个",我似乎无法解决这个问题。

看了我的课后,我注意到此消息仅出现在我的if statements旁边,这就是我的测试无法100%覆盖的原因。

我想我问是否有人知道如何在Junit中测试IF-Stategent,以免错过分支。

这是我要测试的代码:

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

(我正在使用Junit 4)

简单:

想要在您正在测试的方法中具有一个不同的测试用例 per 路径;喜欢:

  • testesetheightwithnegativeValue()
  • testesetheightwithzerovalue()
  • testsetheightwithpositiveValue

每个人都对您正在测试的方法进行了特定的输入,并检查了预期的输出。

在这里真正带走的地方是:考虑关于您的代码的思考。您不需要覆盖工具来确定您的方法需要更多测试。相反:您查看方法, think 它在做什么;然后您编写测试容器。

覆盖范围很好告诉您您做了正确的事情;但是,"做正确的事"是您应该努力做的事情。并且不符合一些数字。

和,正如评论指出的那样:考虑使用TDD方法:当您在之前编写测试时,您可以创建"匹配"的生产代码,然后将"思考"部分作为一个"匹配"您的工作过程的基本要素。

您的代码

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

最新更新