为什么我的分支覆盖率和线路覆盖率不合格?
Why is my branch coverage rate and line coverage rate failing?
考虑以下代码:
@Test
public final void testIsUnitInvalidSadCase() {
boolean expectedResult = false;
boolean actualResult = false;
double invalidUnit = 0.0;
testFuelUnitValidator =
new FuelUnitValidator(
defaultTimestamp,
defaultFluids,
invalidUnit);
actualResult = testFuelUnitValidator.isUnitInvalid();
assertThat(actualResult, is(equalTo(expectedResult)));
}
@Test
public final void testIsUnitInvalidHappyCase() {
boolean expectedResult = false;
boolean actualResult = true;
double invalidUnit = 0.02;
testFuelUnitValidator =
new FuelUnitValidator(
defaultTimestamp,
defaultFluids,
invalidUnit);
actualResult = testFuelUnitValidator.isUnitInvalid();
assertThat(actualResult, is(equalTo(expectedResult)));
}
这是方法:
public boolean isUnitInvalid() {
if (Math.abs(unit) < 0.0) {
return true;
}
return false;
}
当我将第一个测试行更改为 if (Math.abs(smu) <= 0.01)
并将测试 类 更改为 boolean expectedResult = true;
时,maven 构建良好。但是当我尝试使用上面的代码构建时,maven 会抛出一个错误:
[ERROR] *className failed check. Branch coverage rate of 95.8% is below 100.0%
*className failed check. Line coverage rate of 97.8% is below 100.0%
当您在被测方法中使用 0.01 时,您的 两个 测试将执行该方法的两个部分(return 语句)。因此,您将获得 100% 的覆盖率。
当您在被测方法中使用 0.00 时,您的两个测试仅执行 "false" 退出。没有涵盖 "return false;" 语句。所以你得到的覆盖率低于 100%。
考虑以下代码:
@Test
public final void testIsUnitInvalidSadCase() {
boolean expectedResult = false;
boolean actualResult = false;
double invalidUnit = 0.0;
testFuelUnitValidator =
new FuelUnitValidator(
defaultTimestamp,
defaultFluids,
invalidUnit);
actualResult = testFuelUnitValidator.isUnitInvalid();
assertThat(actualResult, is(equalTo(expectedResult)));
}
@Test
public final void testIsUnitInvalidHappyCase() {
boolean expectedResult = false;
boolean actualResult = true;
double invalidUnit = 0.02;
testFuelUnitValidator =
new FuelUnitValidator(
defaultTimestamp,
defaultFluids,
invalidUnit);
actualResult = testFuelUnitValidator.isUnitInvalid();
assertThat(actualResult, is(equalTo(expectedResult)));
}
这是方法:
public boolean isUnitInvalid() {
if (Math.abs(unit) < 0.0) {
return true;
}
return false;
}
当我将第一个测试行更改为 if (Math.abs(smu) <= 0.01)
并将测试 类 更改为 boolean expectedResult = true;
时,maven 构建良好。但是当我尝试使用上面的代码构建时,maven 会抛出一个错误:
[ERROR] *className failed check. Branch coverage rate of 95.8% is below 100.0%
*className failed check. Line coverage rate of 97.8% is below 100.0%
当您在被测方法中使用 0.01 时,您的 两个 测试将执行该方法的两个部分(return 语句)。因此,您将获得 100% 的覆盖率。
当您在被测方法中使用 0.00 时,您的两个测试仅执行 "false" 退出。没有涵盖 "return false;" 语句。所以你得到的覆盖率低于 100%。