Подтвердить что ты не робот

Охват кода в Java с помощью EclEmma, ​​не проверяющего ожидания методов исключения

Я пытаюсь получить покрытие кода в java, используя Eclipse и EclEmma.

В моих тестах используется JUnit 4, и у меня есть некоторые тесты, похожие на следующие:

    @Test(expected = IllegalArgumentException.class)
    public void createTime_withInvalidMinuteUnder0_throws(){
    //Arrange
    ...
    //Act
    Something triggering IllegalArgumentException Here       
}

И EclEmma говорит, что тест терпит неудачу, потому что вызывается исключение IllegalArgumentException. Таким образом, он снижает показатель покрытия кода, хотя он должен что-то бросать. Есть ли возможность увидеть, что ожидаемый тег исключений JUnit?

edit: Я узнал, что если вы добавите бросок в объявление теста, он будет работать!

4b9b3361

Ответ 1

Нет, нет способа заставить EclEmma заметить предложение expected. Они признают этот факт здесь.

Почему тестовые примеры JUnit4 с ожидаемыми исключениями показаны как не охваченные?

Тесты JUnit4 с ожидаемыми исключениями показаны как не охваченные, даже если они были выполнены. Причиной этого является то, что базовая библиотека покрытия кода JaCoCo учитывает только код, выполняемый при выполнении определенных зондов. Для успешных тестов, отмеченных @Test{expected=...}, это не так.

Лично я не стал бы слишком беспокоиться об этом. Охват тестовых примеров - это наименее интересная вещь, которую может сказать вам EclEmma; Я всегда полностью игнорирую эти показатели и фокусируюсь на охвате моего производственного кода.

Ответ 2

Не могу комментировать, но я хотел бы отметить, в связи с принятым ответом, что есть очень веская причина обратить внимание на освещение вашего тестового кода.

Это просто способ упростить JUnit, чтобы испортить соглашение об именовании метода тестирования или забыть аннотацию @Test, в зависимости от вашей версии JUnit. Сделайте это, и вас можно легко обмануть, подумав, что ваш сплошной зеленый бар означает, что хороший тест, который вы только что добавили, прошел, когда на самом деле он никогда не запускался. Окраска покрытия покажет это очень заметно. Кроме того, как отмечает этот поток, некоторые из ваших тестов, которые генерируют исключения, могут выглядеть так, как будто они не запускались, когда они это делали.

Ответ 3

Я столкнулся с той же проблемой и предложил запрос на тяну, касающийся самой заметной причины этой досады. Вместо того, чтобы добавлять слишком много пробников, я имею дело только с опкодами вызовов методов. Другими словами, проблема (ранее) неправильных результатов покрытия, вызванная исключением, вызванным вызовом метода, решается, но не если исключение порождается, например, делением на ноль, неправильным литом или индексом массива проблема.

https://github.com/jacoco/jacoco/pull/261

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