jacoco的java问题

0yycz8jy  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(329)

我正在申请除法,它有一个验证器类。当我编写一些测试时,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个被忽略),但是我不明白为什么会发生这种情况,以及第二个分支是什么。测试存在并且通过得很好。即使我交换 IFValidatorImpl jacoco最后展示了 IF 有一半覆盖。形象

csga3l58

csga3l581#

这是因为除数和被除数的值不会导致任何if语句被执行。在调用 validate(10,10); 看看这是否涵盖了整个方法。

相关问题