EclEmma (Jacocco) показывает, что строка не покрыта, даже если строка выполнена - PullRequest
0 голосов
/ 04 января 2019

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

Код:

1 public void myMethod(SomeService someService){
2   throwException(someService);
3 }

4 public void throwException(SomeService someService){
5   THROW an exception here
6 }

В моем тестовом классе я готовлю данные, необходимые для SomeService, и вызываю myMethod из кода выше.строка № 2 показывает красный цвет, даже если строка выполняется и выдает исключение, как и ожидалось.Пожалуйста, предложите, как я могу показать покрытую линию, чтобы увеличить покрытие линии.

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Пожалуйста, используйте поиск перед отправкой вопросов, потому что это широко известно Ограничение JaCoCo описано как в FAQ по EclEmma , так и в JaCoCo FAQ :

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

JaCoCo определяет выполнение кода с помощью так называемых пробников.Зонды вставляются в поток управления в определенных положениях.Код считается выполненным, когда последующий зонд был выполнен.В случае исключений такая последовательность инструкций прерывается где-то посередине, и соответствующая строка исходного кода не помечается как покрытая.

Другими словами: если вызов метода всегда вызывает исключение, как в вашемНапример, строка этого вызова метода никогда не будет помечена как полностью покрытая зеленым цветом.Единственный способ увидеть строку с вызванным вызовом метода - это выполнить / проверить, когда этот вызов метода не вызывает исключение.

0 голосов
/ 04 января 2019

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

...