Вопрос

Я использую плагин Maven (2) Cobertura для создания отчетов о покрытии кода, и у меня есть следующая заглушка, которую я использую в методе:

try {
    System.exit(0);
} catch (final SecurityException exception) {
    exception.printStackTrace();
}
System.err.println("The program never exited!");

Я знаю, что мне нужно записать исключение и т. д., но сейчас дело не в этом ... Cobertura отказывается признать, что строка после печати трассировки стека покрыта. То есть строка со знаком '}' перед оператором System.err.println не отображается как покрытая. Ранее заключительная фигурная скобка метода не отображалась как покрытая, следовательно, оператор System.err . Любая идея, как я могу убедить подключаемый модуль cobertura maven, что, поскольку оператор System.err.println покрыт, эта завершающая скобка должна быть закрыта?

О да, и я использую фиктивный менеджер безопасности, чтобы вызвать исключение безопасности, поскольку я нашел самый простой способ заставить тест продолжаться после вызова System.exit .

Это было полезно?

Решение

Я некоторое время не использовал Cobertura (2005?) и видел такое поведение тогда. Аналогичная проблема существует с NCover для C # и фигурными скобками после блоков catch / finally.

Я бы предложил добавить в этот отчет об ошибке в Cobertura. подробности аналогичного вопроса . Кроме того, следуйте советам @ tvanfosson и поймите, что отсутствие фигурной скобки, которая на самом деле не становится ничем в JVM, - это то, что вы можете игнорировать как «шум».

Другие советы

Я бы посмотрел отчет о покрытии. Дважды проверьте мои тесты. Обратите внимание, что код действительно покрывается, и не беспокойтесь о достижении 100%. Покрытие кода лучше всего использовать для поиска областей, в которых вы, возможно, пренебрегали своими тестами, но просто сосредоточиться на получении 100% покрытия, так как цель - плохая привычка, которая может привести к тому, что вы пропустите тесты, которые должны быть написаны только потому, что ваш инструмент показывает 100%. Используйте инструмент для того, что он может сделать, но не попадайтесь в ловушку, позволяющую инструменту определять, что вы делаете.

В формате файла классов Java каждый метод снабжен табличным отображением смещения кода на номера строк. В этом случае закрывающая фигурная скобка не производит никакого байт-кода, следовательно, она не покрыта. Это проблема несовершенного соответствия между источником и байт-кодом. Он должен обрабатываться инструментом покрытия, распознавая эту строку как некодовую.

Я знаю, что у Эммы есть похожие проблемы. Clover стоит намного лучше, но коммерческий (не уверен, что он справится и в этом случае) , Если вы используете IDEA, вам следует попробовать их новую реализацию покрытия - это довольно хорошо и находится в активной разработке.

Я знаю, что это старый вопрос, и Кобертура уже исправила это, но для полноты отсутствующее освещение раздела "} " был вызван внутренним автоматически "наконец-то" блок.

Смотрите свой код как этот:

try {
    System.exit(0);
} catch (final SecurityException exception) {
    exception.printStackTrace();
} finally {
    // noop
}

К счастью, в некоторых версиях этого больше не происходит.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top