Как получить полное покрытие кода в мультимодульном проекте Maven - PullRequest
3 голосов
/ 17 июня 2011

Представьте себе мультимодульный проект Maven, такой как следующий:

parent
  +- core
  +- main

main зависит от модуля core.

Теперь я пишу класс CoreClass in core, двумя способами: method1() и method2()core тестах я пишу тестовый класс, который будет проверять только CoreClass.method1().

Если я запустил инструмент покрытия (в моем случае Cobertura, используя mvn sonar:sonar), я обнаружу, что получаю 50% тестового покрытия на CoreClass (если мы представим, что оба метода имеют одинаковую длину).

До сих пор все в порядке.

Теперь в main проект, я пишу тестовый класс, который будет тестировать CoreClass.method2().Так что обычно , я ожидаю, что при выполнении анализа всего проекта будет 100% покрытия линии на CoreClass.

Однако я все еще получаюмой 50% .

Я понимаю, что это комплексное поведение.Действительно, Cobertura будет использовать CoreClass для анализа покрытия только во время выполнения тестов на модуле core , а не на main.Это объясняет, почему у меня все еще есть 50% покрытия кода.

Однако мой вопрос заключается в том, чтобы узнать, есть ли способ получить покрытие real кода CoreClass когда я запускаю тесты на всех моих модулях.

Спасибо!

ps: Я знаю, что в идеальном мире это не касаетсямодуль main для проверки классов core.Но, как вы, возможно, знаете, мы не в идеальном мире: o)

Техническая информация: Java 1.6, JUnit 4.8.1, Maven 2.0.9 (будет обновлен до 2.2.1 скоро, но я не думаю, что это действительно имеет значение), сонар 2.8

Ответы [ 2 ]

1 голос
/ 24 сентября 2011

Используйте jacoco и sonar и получите один файл jacoco.exec для всех модулей. Сонар будет использовать этот файл и сообщит правильное покрытие для каждого модуля. Я успешно использую его для многомодульного проекта с Sonar

0 голосов
/ 02 февраля 2017

Здесь вы можете найти решение для jacoco / sonar и здесь только для jacoco .

...