Добрый день уважаемые коллеги, возникла у меня следующая проблема - захотел я навести порядок в коде. Ибо, кто то пишет в IDEA, кто то в Eclipse. Тут стажеры зашли на месяц - чего то наворотили. Причем порядок я захотел наводить централизованно так, что бы наглядно видеть исчезающие дубликаты и потенциальные баги. В прошлый раз для этого я использовал SonarQube и SonarRunner. Но в прошлый раз тесты у меня лежали в пакете src/main - и все было неплохо. В этот же раз тесты лежат в src/test и запускаются через maven. Так вот, несмотря на то, что SonarQube видит файлы тестов - они попадают в code line, в количество файлов - он их никак не анализирует. Пробовал прописывать свойство sonar.tests= - результат тот же. Может быть кто нибудь сталкивался с такой проблемой или может посоветовать альтернативный вариант - но хотелось бы с централизованным сервером.
В Intelij когда выбираешь Analyze, он ведь предлагает выбрать сорс для анализа, пробовали указать явно папку src/test
Так в IDEA все работает, в том то и дело, что я хочу применить общий свод правил…поэтому и использую SonarRunner
Копайте в сторону sonar.properties.
Хотя, в случае с maven’ом, не совсем понимаю, зачем вам runner. Почему нельзя использовать sonar maven plugin?
Я могу использовать и его, главное, что бы там той же проблемы не возникло. У вас есть положительный пример - использования Sonar для анализа пакета с тестами?
Да ну, вы серьезно что-ли? Несколько дней назад постил реальный пример в БЗ, а вы теперь задаете такие вопросы? Если вам лень было почитать и самому попробовать, то no comments.
В том то все и дело, что все то, что приведено на ваших скриншотах - позволяет увидеть и Sonnar Runner. Они парсятся и видятся - но не анализируются.
Сейчас настрою запуск через maven. Может быть в этом есть особенность.
Настроил тот же самый эффект. Пакеты видятся. Surfire report подтягивается. Классы с тестами в общую картину включаются, но не анализируются.
В консоли висит вот это
INFO] [10:17:05.931] Source paths: pom.xml, src/main/java
INFO] [10:17:05.931] Test paths: src/test/java
INFO] [10:17:05.931] Binary dirs: target/classes
INFO] [10:17:05.931] Source encoding: UTF-8, default locale: en_US
INFO] [10:17:05.931] Index files
INFO] [10:17:06.025] 37 files indexed
INFO] [10:17:06.540] Quality profile for java: Sonar way
INFO] [10:17:06.555] Sensor JavaSquidSensor...
INFO] [10:17:06.618] Java Main Files AST scan...
INFO] [10:17:06.618] 0 source files to be analyzed
INFO] [10:17:06.618] 0/0 source files analyzed
INFO] [10:17:06.618] Java Main Files AST scan done: 0 ms
INFO] [10:17:06.618] Java bytecode scan...
INFO] [10:17:06.664] Java bytecode scan done: 46 ms
INFO] [10:17:06.664] Java Test Files AST scan...
INFO] [10:17:06.664] 37 source files to be analyzed
INFO] [10:17:06.898] Java Test Files AST scan done: 234 ms
INFO] [10:17:06.898] 37/37 source files analyzed
INFO] [10:17:06.914] Package design analysis...
INFO] [10:17:06.930] Package design analysis done: 16 ms
То есть тестовые пакеты он видит, но почему он по ним ничего не выводит. На Dashboard самого Sonar, время запуска менятся - то есть какие то данные все таки пишутся
Попробую переустановить Sonar, других возможностей я не вижу пока.
Судя по всему, у Sonar какие то проблемы именно с анализом пакета test.По крайней мере при настройках по умолчанию. Они индексируются но не анализируются. Основание - так утверждать, я скопировал пакет src\test в пакет src\main и сразу появилось Technical Debt, Issue, различные ошибки - в общем все то, что должно быть.
Мне кажется, что так и задумано. Всё что лежит в папке src/test
, сонар вполне справедливо считает юнит-тестами проекта и не анализирует их. Они используются для оценки покрытия (coverage report).
К тому же, разработчики недавно кардинально меняли логику работы с юнит-тестами: http://www.sonarqube.org/unit-test-execution-in-sonarqube/
Как вариант, можно попробовать “обмануть” сонар, сказав что у вас 2 модуля: один с исходниками в src/main/java
, а второй – в src/test/java
.
http://docs.sonarqube.org/display/SONAR/Analyzing+with+SonarQube+Runner#AnalyzingwithSonarQubeRunner-Multi-moduleProject
Спасибо за мысль. Что то я не подумал о мульти-модульном проекте.
И чем все закончилось? Так как я наблюдаю довольно похожую картину, но у меня в src\test лежат UI тесты. 40/40 source files analyzed, а в самом сонаре все по 0.
Пока еще не настраивал. Просто скопировал все в src\main и запустил на анализ:)
Если вы используете Maven, то скорее всего файлы из тестового каталога не воспринимаются как source-файлы. По умолчанию к ним относятся только файлы из src/main/java. Чтобы это исправить, нужно добавить src/test/java в список каталогов с исходниками. Для этого есть отдельный поагин:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.9.1</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>src/test/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
После этого данные файлы уже будут восприниматься как исходные. Как минимум в сборку они будут попадать.
Спасибо, а выполняться это будет по прежнему по команде mvn sonar:sonar?
Для этого вам надо посмотреть, какие цели выполняются до этого (многие цели вызываются неявно). На худой конец, можете расширить команду до вот такой:
mvn generate-sources:add-source sonar:sonar