JUnit 测试:如何在不遗漏分支的情况下测试 if 语句?
JUnit Testing: How To Test If Statements Without Missing A Branch?
我有 运行 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)
简单:
您希望在被测方法中每个路径有一个不同的测试用例;喜欢:
- testSetHeightWithNegativeValue()
- testSetHeightWithZeroValue()
- testSetHeightWithPositiveValue
它们中的每一个都为您的测试方法提供特定输入并检查预期输出。
这里真正的收获是:考虑思考您的代码。您不需要覆盖工具来确定您的方法需要更多测试。相反:你看看你的方法,思考它在做什么;然后你写测试用例。
报道可以告诉你你做了正确的事;但是"doing the right thing"是你自己应该努力做到的;而不是满足一些数字。
并且,正如评论所指出的:考虑使用 TDD 方法:当您编写测试时 before 您创建了 "matching" 产品代码,然后您使 "thinking" 部分成为您工作程序的基本要素。
您的代码
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
我有 运行 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)
简单:
您希望在被测方法中每个路径有一个不同的测试用例;喜欢:
- testSetHeightWithNegativeValue()
- testSetHeightWithZeroValue()
- testSetHeightWithPositiveValue
它们中的每一个都为您的测试方法提供特定输入并检查预期输出。
这里真正的收获是:考虑思考您的代码。您不需要覆盖工具来确定您的方法需要更多测试。相反:你看看你的方法,思考它在做什么;然后你写测试用例。
报道可以告诉你你做了正确的事;但是"doing the right thing"是你自己应该努力做到的;而不是满足一些数字。
并且,正如评论所指出的:考虑使用 TDD 方法:当您编写测试时 before 您创建了 "matching" 产品代码,然后您使 "thinking" 部分成为您工作程序的基本要素。
您的代码
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