【问题标题】:How to get an actual code coverage report in IntelliJ IDEA?如何在 IntelliJ IDEA 中获得实际的代码覆盖率报告?
【发布时间】:2020-09-07 12:15:13
【问题描述】:

我有一个简单的类叫做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 的部分没有被测试。所以我假设我应该在覆盖报告中看到这部分没有被覆盖。但这就是我得到的:

当我让语句单独出现时,我得到了正确的结果:

即使代码完全相同,但仅基于代码的结构,我得到的结果也不同。当一条线的一部分没有被实际覆盖时,我如何才能指示它没有被覆盖?

【问题讨论】:

    标签: java testing intellij-idea test-coverage


    【解决方案1】:

    IntelliJ 的测试覆盖率运行器具有不同的运行设置(出于性能原因)。默认情况下,使用Sampling 模式。这会导致代码行覆盖率降低(执行)速度可以忽略不计。 现在,如果您想要准确收集分支覆盖率(例如 if 语句),那么您可以使用 Trace 模式。 使用Trace 模式,您将获得以下测试覆盖率。

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

    【讨论】:

      猜你喜欢
      • 2021-08-19
      • 1970-01-01
      • 2021-09-27
      • 2014-09-09
      • 2014-08-21
      • 1970-01-01
      • 1970-01-01
      • 2019-04-24
      • 2011-01-14
      相关资源
      最近更新 更多