Jacoco 的问题
Problems with Jacoco
我正在申请分割,它有一个验证器class。当我写一些测试时,Jacoco 显示一行说它没有被测试覆盖,但它被覆盖了。
验证者代码:
public class ValidatorImpl implements Validator {
@Override
public void validate(int dividend, int divisor) {
if (divisor == 0) {
throw new IllegalArgumentException("You can`t divide by ZERO!");
}
if (divisor < 0) {
throw new IllegalArgumentException("Divisor must be above zero");
}
if (dividend < 0) {
throw new IllegalArgumentException("Dividend must be above zero");
}
}
}
并对其进行测试 class:
class ValidatorTest {
Validator validator = new ValidatorImpl();
@Test
void validatorShouldThrowIllegalArgumentExceptionIfDividendBelowZero() {
assertThrows(IllegalArgumentException.class, () -> validator.validate(-10, 10),
"Dividend must be above zero");
}
@Test
void validatorShouldThrowIllegalArgumentExceptionIfDivisorBelowZero() {
assertThrows(IllegalArgumentException.class, () -> validator.validate(10, -10),
"Divisor must be above zero");
}
@Test
void validatorShouldThrowIllegalArgumentExceptionIfDivisorEqualsZero() {
assertThrows(IllegalArgumentException.class, () -> validator.validate(10, 0),
"You can`t divide by ZERO!");
}
}
这里是 Jacoco 的结果,它表明最后一个条件被覆盖了一半(2 个分支中的 1 个被遗漏),但我不明白为什么会发生以及什么是第二个分支。测试存在并且顺利通过。即使我在 ValidatorImpl
中交换 IF
,Jacoco 也显示最后一个 IF
被一半覆盖。
Image
发生这种情况是因为除数和被除数的值导致 none 的 if 语句被执行。在调用 validate(10,10);
的地方创建一个额外的测试,看看它是否涵盖了整个方法。
我正在申请分割,它有一个验证器class。当我写一些测试时,Jacoco 显示一行说它没有被测试覆盖,但它被覆盖了。 验证者代码:
public class ValidatorImpl implements Validator {
@Override
public void validate(int dividend, int divisor) {
if (divisor == 0) {
throw new IllegalArgumentException("You can`t divide by ZERO!");
}
if (divisor < 0) {
throw new IllegalArgumentException("Divisor must be above zero");
}
if (dividend < 0) {
throw new IllegalArgumentException("Dividend must be above zero");
}
}
}
并对其进行测试 class:
class ValidatorTest {
Validator validator = new ValidatorImpl();
@Test
void validatorShouldThrowIllegalArgumentExceptionIfDividendBelowZero() {
assertThrows(IllegalArgumentException.class, () -> validator.validate(-10, 10),
"Dividend must be above zero");
}
@Test
void validatorShouldThrowIllegalArgumentExceptionIfDivisorBelowZero() {
assertThrows(IllegalArgumentException.class, () -> validator.validate(10, -10),
"Divisor must be above zero");
}
@Test
void validatorShouldThrowIllegalArgumentExceptionIfDivisorEqualsZero() {
assertThrows(IllegalArgumentException.class, () -> validator.validate(10, 0),
"You can`t divide by ZERO!");
}
}
这里是 Jacoco 的结果,它表明最后一个条件被覆盖了一半(2 个分支中的 1 个被遗漏),但我不明白为什么会发生以及什么是第二个分支。测试存在并且顺利通过。即使我在 ValidatorImpl
中交换 IF
,Jacoco 也显示最后一个 IF
被一半覆盖。
Image
发生这种情况是因为除数和被除数的值导致 none 的 if 语句被执行。在调用 validate(10,10);
的地方创建一个额外的测试,看看它是否涵盖了整个方法。