如何在IntelliJ IDEA中获取实际的代码覆盖率报告?

我有一个名为Someclass的简单类:

public class Someclass {

    public int value = 0;

    public void inc() {
        value++;
    }

    public void dec()
    {
        if (isBiggerthanFive()) value--;
        value--;
    }

    private boolean isBiggerthanFive() {
        return value > 5;
    }
}

还有一个名为TheTest的测试类:

class TheTest {

    Someclass t;

    @BeforeEach
    void setUp() {
        t = new Someclass();
    }

    @Test
    public void whenNewTestIsCreated_ValueIsZero()
    {
        assertEquals(t.value,0);
    }

    @Test
    public void whenIncIsCalledWithValueOfZero_ValueIsOne()
    {
        t.inc();
        assertEquals(t.value,1);
    }

    @Test
    public void whenDecIsCalledWithValueOfZero_ValueIsnegativeone()
    {
        t.dec();
        assertEquals(t.value,-1);
    }
}

请注意函数dec的结构以及整个if条件和语句如何在同一行上。在测试中,当值大于5时,这部分递减2而不进行测试。因此,我认为我应该在覆盖率报告中看到这一部分没有涉及。但这就是我得到的:

如何在IntelliJ IDEA中获取实际的代码覆盖率报告?

如何在IntelliJ IDEA中获取实际的代码覆盖率报告?

当我让陈述独立出现时,我得到正确的结果:

如何在IntelliJ IDEA中获取实际的代码覆盖率报告?

如何在IntelliJ IDEA中获取实际的代码覆盖率报告?

即使代码是完全相同的,但仅基于代码的结构,我还是会得到不同的结果。当没有被手动覆盖时,如何指示行的一部分未被覆盖?

RERR555 回答:如何在IntelliJ IDEA中获取实际的代码覆盖率报告?

IntelliJ的测试覆盖率运行程序具有不同的运行设置(出于性能原因)。默认情况下,使用Sampling模式。这导致代码行覆盖率的降低(执行)可忽略不计。 IntelliJ Test Coverage Samling setting 现在,如果您希望准确收集分支覆盖范围(例如if语句),则可以使用Trace模式。 IntelliJ Test Coverage Trace setting 使用Trace模式,您将获得以下测试覆盖率。

Trace coverage report

Trace coverage hits

这在IntelliJ的帮助网站上有进一步的记录。参见Configure code coverage options

本文链接:https://www.f2er.com/2307143.html

大家都在问