Cobertura исключает vs ignore

Я вижу, что в плагине cobertura-maven я могу настроить свои инструменты с помощью excludes и ignores. В чем разница между этими двумя?

Ответ 1

Плагин maven не содержит документации для этих параметров конфигурации (но они включены в документы). Документ ant cobertura содержит следующую документацию:

Вы можете сказать Cobertura игнорировать определенные классы, передавая "игнорировать" регулярные выражения. Шаблон игнорирования может быть любым правильным регулярным выражением perl 5. Это игнорирует любые вызовы любого метода, который соответствует регулярному выражению ignore. Он не будет пропускать эти классы во время инструментария. Чтобы исключить классы из инструментов, либо исключите их из набора файлов, либо используйте альтернативный метод ниже и укажите шаблон excludeClasses.

Смотрите также: https://github.com/cobertura/cobertura/wiki/Ant-Task-Reference#cobertura-instrument-task

Ответ 2

Очень жаль, но портить ужасную документацию не помогает. Вы процитировали:

Вы можете сказать Cobertura игнорировать определенные классы, передавая "игнорировать" регулярные выражения. Шаблон игнорирования может быть любым правильным регулярным выражением perl 5. Это игнорирует любые вызовы любого метода, который соответствует регулярному выражению ignore. Он не будет пропускать эти классы во время инструментария. Чтобы исключить классы из инструментов, либо исключите их из набора файлов, либо используйте альтернативный метод ниже и укажите шаблон excludeClasses.

Этот непоследовательный абзац начинается с указания "... игнорировать определенные классы, передавая" игнорировать "регулярные выражения". Затем второе предложение позже "Это будет игнорировать любые вызовы любому методу, который соответствует регулярному выражению ignore."

Ну, так что это? "Игнорирует" игнорирует классы или методы? Ссылка в командной строке, по-видимому, подразумевает, что игнорировать игнорирует строку кода на основе соответствия RegEx (я бы хотел, чтобы это было правдой):

Ни одна из этих интерпретаций не работает для <ignore> в плагине maven.

Экспериментально я обнаружил, что <exclude> является способом исключения на уровне класса. Я не нашел способ исключить из-за гранулярности менее класс. Однако то, что они также не говорят вам, это то, что <exclude> ожидает относительный путь файловой системы, а не выражение Java package.class, что означает <exclude> ожидает, например, one/two/three/Myclass.class, а не "one.two.three.Myclass".

Ответ 3

Игнорировать и исключать действительно ничего не значит. Исключить удалит файл из сканирования Cobertura. Игнорировать удалит все способы использования класса из-за вклада в покрытие линии.

Рассмотрим следующий фрагмент кода:

public class Foo {
     public void someMethod() {
         Bar bar = new Bar();
     }
}

Если вы сконфигурируете <exclude> Foo.class </exclude> , то полнота класса Foo не будет отображаться в ваших отчетах.

Попутно, если вы сконфигурируете <ignore> Foo.class </ignore> , то Foo по-прежнему будет отображаться в вашей отчетности, но использование Foo в других классах будет проигнорировано.

Если вы сконфигурируете <ignore> Bar.class </ignore> , тогда сканирование Foo будет игнорировать строку, в которой инициализируется строка.

Чтобы действительно сделать эту палочку, расскажите, почему вы будете игнорировать. Скажем, что есть объект (например, Logger), который вы не хотите отображать в сканировании покрытия кода для любых классов. Игнорировать позволяет это сделать.