Как получить актуальный отчет о покрытии кода в 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 и инструкция находятся в одной строке. В тесте эта часть уменьшения на 2, когда значение больше 5, не проверяется. Итак, я предполагаю, что я должен увидеть в отчете о покрытии, что эта часть не охвачена. Но вот что я получаю:

Когда вместо этого я оставляю статус на отдельной строке, я получаю правильные результаты:

Несмотря на то, что код полностью такой же, я получаю разные результаты, основанные только на структуре кода. Как я могу определить, что часть линии не покрыта, если она не покрыта полностью?


person StackExchange123    schedule 20.05.2020    source источник


Ответы (1)


Средство выполнения тестового покрытия IntelliJ имеет разные настройки запуска (по соображениям производительности). По умолчанию используется режим Sampling. Это приводит к покрытию строки кода с незначительным (выполнением) замедлением. Настройка IntelliJ Test Coverage Samling Теперь, если вы хотите получить точную коллекцию покрытия ветки (например, if-выражения), вы можете использовать режим Trace. Настройка трассировки покрытия тестов IntelliJ Используя режим Trace, вы получите следующее покрытие теста.

Отчет о покрытии трассировки

Обнаружение обращений

Это дополнительно описано на веб-сайте справки IntelliJ. См. Раздел Настройка параметров покрытия кода.

person Ivo Mori    schedule 21.05.2020