nebula 를 이용한 integration test 분리

분류없음 2018.05.18 07:57 posted by dev.bistro

테스트를 진행함에서 있어서 unit test와 integration test를 분리하고 싶은 니즈가 많다. junit5를 이용한다면,  Tag로 쉽게 처리 가능하지만 ( https://junit.org/junit5/docs/5.0.2/api/org/junit/jupiter/api/Tag.html )  레거시 프로젝트들 대다수가 junit5를 사용하지 못한다.

그래서 보통은 https://selimober.com/gradle_unit_integration/ 이러한 방법으로 처리하는데  nebula plugin을 이용하면 쉽게 처리 할 수 있다.


nebula facet : https://github.com/nebula-plugins/nebula-project-plugin


1. src/test/java 에는 unit-test만 남겨놓고 나머지는 src/integTest/java 에는 인테그레이션 테스트를 위치시킨다.
(디렉토리 변경 가능할줄 알았으나 고정되어 있다)

2. buildScript 부분에 아래와 같이 nebula.facet 의존성 추가와 plugin 설정을 한다.

buildscript {
...
dependencies {
...
classpath "com.netflix.nebula:nebula-project-plugin:3.4.1"
}
} apply plugin: 'nebula.facet'


3. 다음과 같은 가장 기본적인 설정을 추가한다. 

facets {
integTest {
}
}


4. 프로젝트를 reload 하면 'integTest' 라는 gradle-task가 생긴것을 확인 할 수 있다.



이 때의 문제점은 test-report 가 2개가 생긴다는 것이다. (test와 integTest) 이 2개의 리포트를 합치고자 하는 이슈가 있을때에는 아래처럼 TestReport 관련 task를 하나 추가하면 된다.

task testReport(type: TestReport) {
destinationDir = file("$buildDir/reports/combined")
reportOn test
reportOn integTest
}