我正在申请除法,它有一个验证器类。当我编写一些测试时,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 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个被忽略),但是我不明白为什么会发生这种情况,以及第二个分支是什么。测试存在并且通过得很好。即使我交换 IF
在 ValidatorImpl
jacoco最后展示了 IF
有一半覆盖。形象
1条答案
按热度按时间csga3l581#
这是因为除数和被除数的值不会导致任何if语句被执行。在调用
validate(10,10);
看看这是否涵盖了整个方法。