Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

SonarQube - не анализирует пакет src/test


(Александр Шиповалов) #1

Добрый день уважаемые коллеги, возникла у меня следующая проблема - захотел я навести порядок в коде. Ибо, кто то пишет в IDEA, кто то в Eclipse. Тут стажеры зашли на месяц - чего то наворотили. Причем порядок я захотел наводить централизованно так, что бы наглядно видеть исчезающие дубликаты и потенциальные баги. В прошлый раз для этого я использовал SonarQube и SonarRunner. Но в прошлый раз тесты у меня лежали в пакете src/main - и все было неплохо. В этот же раз тесты лежат в src/test и запускаются через maven. Так вот, несмотря на то, что SonarQube видит файлы тестов - они попадают в code line, в количество файлов - он их никак не анализирует. Пробовал прописывать свойство sonar.tests= - результат тот же. Может быть кто нибудь сталкивался с такой проблемой или может посоветовать альтернативный вариант - но хотелось бы с централизованным сервером.


(Sergey Pirogov) #2

В Intelij когда выбираешь Analyze, он ведь предлагает выбрать сорс для анализа, пробовали указать явно папку src/test


(Александр Шиповалов) #3

Так в IDEA все работает, в том то и дело, что я хочу применить общий свод правил…поэтому и использую SonarRunner


(Sergey Korol) #4

Копайте в сторону sonar.properties. :wink:

Хотя, в случае с maven’ом, не совсем понимаю, зачем вам runner. Почему нельзя использовать sonar maven plugin?


(Александр Шиповалов) #5

Я могу использовать и его, главное, что бы там той же проблемы не возникло. У вас есть положительный пример - использования Sonar для анализа пакета с тестами?


(Sergey Korol) #6

Да ну, вы серьезно что-ли? Несколько дней назад постил реальный пример в БЗ, а вы теперь задаете такие вопросы? Если вам лень было почитать и самому попробовать, то no comments.


(Александр Шиповалов) #7

В том то все и дело, что все то, что приведено на ваших скриншотах - позволяет увидеть и Sonnar Runner. Они парсятся и видятся - но не анализируются.


(Александр Шиповалов) #8

Сейчас настрою запуск через maven. Может быть в этом есть особенность.


(Александр Шиповалов) #9

Настроил тот же самый эффект. Пакеты видятся. Surfire report подтягивается. Классы с тестами в общую картину включаются, но не анализируются.


(Александр Шиповалов) #10

В консоли висит вот это

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

(Александр Шиповалов) #11

То есть тестовые пакеты он видит, но почему он по ним ничего не выводит. На Dashboard самого Sonar, время запуска менятся - то есть какие то данные все таки пишутся


(Александр Шиповалов) #12

Попробую переустановить Sonar, других возможностей я не вижу пока.


(Александр Шиповалов) #13

Судя по всему, у Sonar какие то проблемы именно с анализом пакета test.По крайней мере при настройках по умолчанию. Они индексируются но не анализируются. Основание - так утверждать, я скопировал пакет src\test в пакет src\main и сразу появилось Technical Debt, Issue, различные ошибки - в общем все то, что должно быть.


(Alexander Ivanovsky) #14

Мне кажется, что так и задумано. Всё что лежит в папке 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


(Александр Шиповалов) #15

Спасибо за мысль. Что то я не подумал о мульти-модульном проекте.


(Denis Gayevskiy) #16

И чем все закончилось? Так как я наблюдаю довольно похожую картину, но у меня в src\test лежат UI тесты. 40/40 source files analyzed, а в самом сонаре все по 0.


(Александр Шиповалов) #17

Пока еще не настраивал. Просто скопировал все в src\main и запустил на анализ:)


(Kolesnik Nickolay) #18

Если вы используете 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>

После этого данные файлы уже будут восприниматься как исходные. Как минимум в сборку они будут попадать.


(Александр Шиповалов) #19

Спасибо, а выполняться это будет по прежнему по команде mvn sonar:sonar?


(Kolesnik Nickolay) #20

Для этого вам надо посмотреть, какие цели выполняются до этого (многие цели вызываются неявно). На худой конец, можете расширить команду до вот такой:

mvn generate-sources:add-source sonar:sonar