build.gradle
...
// 하위 모든 프로젝트 공통 세팅
subprojects {
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
// 플러그인 적용
apply plugin: 'jacoco'
...
// jacoco 버전 명시
jacoco {
toolVersion = '0.8.8'
}
...
}
...
🪓 gradle wrapper 실행 하는 방법
./gradlew clean test
🪓 하위 모듈만 실행하려면 task 앞에 모듈명을 붙여준다.
- {module_name}:{task}
./gradlew api:clean api:test
--info
옵션을 추가 했다../gradlew api:clean api:test --info
test.exec
: 테스트 코드 수행 후 결과파일index.html
: 테스트 코드 수행 리포트build.gradle
subprojects {
...
jacocoTestReport {
// 분석 리포트 출력 포맷 설정
reports{
html.enabled=true
xml.enabled=true
csv.enabled=true
}
}
...
}
./gradlew api:jacocoTestReport --info
reports
> jacoco
디렉토리에 새로운 파일들이 생겼다.index.html
파일을 열어보면 코드 커버리지 데이터를 확인 할 수 있다.build.gradle
subprojects {
...
jacocoTestCoverageVerification {
violationRules {
rule {
enabled = true
element = 'CLASS'
// 적용 할 패키지(기본은 전체)
// includes = []
// 브랜치 커버리지
limit {
counter = 'BRANCH'
value = 'COVEREDRATIO'
minimum = 0.50
}
// 라인 커버리지
limit {
counter = 'LINE'
value = 'COVEREDRATIO'
minimum = 0.50
}
// 빈 줄을 제외한 코드의 최대 라인수
limit {
counter = 'LINE'
value = 'TOTALCOUNT'
maximum = 200
}
// 커버리지 체크를 제외할 클래스들
excludes = []
}
}
}
...
}
타입 | 설명 |
---|---|
BUNDLE | 패키지 번들 |
CLASS | 클래스 |
GROUP | 번들의 논리적 그룹 |
METHOD | 메소드 |
PACKAGE | 패키지 |
SOURCEFILE | 소스 파일 |
타입 | 설명 |
---|---|
BRANCH | 분기문 수 |
CLASS | 클래스 수 |
COMPLEXITY | 복잡도 |
INSTRUCTION | 명령 수 |
LINE | 소스코드 라인 수 |
METHOD | 메소드 수 |
타입 | 설명 |
---|---|
TOTALCOUNT | 총 개수 |
MISSEDCOUNT | 커버 안된 개수 |
COVEREDCOUNT | 커버 된 개수 |
MISSEDRATIO | 커버 안된 비율 |
|COVEREDRATIO
|커버 된 비율|
./gradlew api:jacocoTestCoverageVerification --info
test
작업 수행 후 jacocoTestReport
, jacocoTestCoverageVerification
를 수행 해야 한다.
./gradlew test jacocoTestReport jacocoTestCoverageVerification
test
실행 후 jacocoTestReport
실행jacocoTestReport
실행 후 jacocoTestCoverageVerification
실행build.gradle
`build.gradle`
```java
subprojects {
...
test {
useJUnitPlatform()
finalizedBy 'jacocoTestReport'
}
jacocoTestReport {
reports{
html.enabled=true
xml.enabled=true
csv.enabled=true
}
finalizedBy 'jacocoTestCoverageVerification'
}
...
}
./gradlew api:clean api:test --info
docker run --name sonarqube -d -p 9000:9000 sonarqube
http://localhost:9000
build.gradle
// 빌드 시
buildscript {
ext {
...
sonarqubeVersion = '3.0'
}
repositories {
mavenCentral()
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
...
classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:${sonarqubeVersion}"
}
}
// 하위 모든 프로젝트 공통 세팅
subprojects {
...
// 플러그인 추가
apply plugin: 'org.sonarqube'
...
sonarqube {
properties {
property "sonar.host.url", "http://localhost:9000"
// 토큰을 직접 등록 해도 되지만 주입 받아서 사용한다.
// property "sonar.login", "{token}"
property "sonar.sources", "src"
property "sonar.language", "java"
property "sonar.sourceEncoding", "UTF-8"
property "sonar.test.inclusions", "**/*Test.java"
property "sonar.coverage.jacoco.xmlReportPaths", "${buildDir}/reports/jacoco/test/jacocoTestReport.xml"
property 'sonar.exclusions', '**/test/**, **/Q*.java, **/*Doc*.java, **/resources/**'
}
}
}
./gradlew api:sonarqube -Dsonar.login={token}
🪓 하위 모듈 모두 한번에 실행하면 메모리 부족이 뜰 수 있다!!
./gradlew sonarqube -Dsonar.login={token}