如何在 IntelliJ IDEA 中获取实际的代码覆盖率报告?
How to get an actual code coverage report in IntelliJ IDEA?
我有一个简单的 class 叫做 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:
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 的测试覆盖率 运行ner 有不同的 运行 设置(出于性能原因)。默认情况下,使用 Sampling
模式。这导致代码行覆盖率可以忽略不计(执行)减慢。
现在,如果您想准确收集分支覆盖率(例如 if 语句),则可以使用 Trace
模式。
使用 Trace
模式,您将获得以下测试覆盖率。
这在 IntelliJ 的帮助网站上有进一步的记录。参见 Configure code coverage options。
我有一个简单的 class 叫做 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:
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 的测试覆盖率 运行ner 有不同的 运行 设置(出于性能原因)。默认情况下,使用 Sampling
模式。这导致代码行覆盖率可以忽略不计(执行)减慢。
Trace
模式。
Trace
模式,您将获得以下测试覆盖率。
这在 IntelliJ 的帮助网站上有进一步的记录。参见 Configure code coverage options。