Gradle 방식
내가 개발하던 팀은 주로 그레이들(Gradle)을 사용했다.
그래서 org.sonarqube 라는 이름의 플러그인을 사용해서 SonarQube 리포팅을 했기에 특별한 설정은 프로퍼티 정도만 추가로 해주었다.
그래서 build.gradle 에 아래와 같이 플러그인 DSL 만 명시해주면 ./gradlew sonar 라는 태스크를 이용해서 리포팅이 가능했다.
plugins {
id "org.sonarqube" version "2.7.1"
}
sonarqube {
properties {
property "sonar.projectKey", "${artifactName}"
property "sonar.projectName", "${artifactName}"
property "sonar.sources", "src/main/java"
property "sonar.tests", "src/test/groovy,src/functionaltest/groovy,src/test/java"
property "sonar.java.binaries", "build/classes/java/main/"
property "sonar.jacoco.reportPaths", "build/jacoco/test.exec"
}
}
apply plugin: 'java' // 소스코드
apply plugin: "jacoco" // 커버리지 측정
apply plugin: 'groovy' // spock framework는 그루비 코드라서
Maven 방식
그런데 옆 팀의 민규 님의 프로젝트는 메이븐으로 되어 있었다.
테스트 코드의 카운터는 나오는데 커버리지가 안나온다고 하였다.
리포트를 보았더니 정말 Coverage 항목이 0.0%로 표시되고 있었다.
해결책은
stackoverflow 에서 찾아보니 같은 증상의 문의 글이 있었다.
SonarQube not picking up Unit Test Coverage
16 votes를 받은 답변에는 JaCoCo 생성되는 파일을 Sonar가 읽을 수 있도록 경로를 정확히 설정하라고 되어 있었다.
민규 님의 해결책은?
pom.xml 에 org.jacoco 관련 추가를 했다.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
// ...
<properties>
// ...
<jacoco.version>0.8.6</jacoco.version>
</properties>
// ...
<build>
<plugins>
// ...
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
아래 명령으로 로컬에서 돌려보니 이젠 커버리지가 표시된다.
./mvnw clean package sonar:sonar -Dsurefire.useSystemClassLoader=false
이후에 커버리지가 표시가 안되는 현상이 있어서 호가인해보니 maven 프로젝트에서는 spock 테스트 코드를 돌려주는 gmavenplus-plugin 라는 플러그인이 있어야 했다.
<plugin>
<!-- The gmavenplus plugin is used to compile Groovy code. To learn more about this plugin,
visit https://github.com/groovy/GMavenPlus/wiki -->
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.11.0</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>compileTests</goal>
</goals>
</execution>
</executions>
</plugin>
자세한 것은 spock-example 프로젝트의 pom.xml 을 참고한다.
'Programing > OpenSource' 카테고리의 다른 글
[Redis] 난 Redis가 Ruby로 짰는 줄 알았는데... (0) | 2019.11.07 |
---|---|
[Docker] Unable to find image 해결책 (0) | 2019.08.08 |
[electon] keytar (0) | 2019.07.15 |
[docker] oracle xe 11g on macOS (0) | 2019.07.12 |
[Util] EUC-KR to JavaScript escaped string (0) | 2019.06.13 |