메이븐 프로젝트에서 단위/통합 테스트 어설프게 구분하기
참조: http://wiki.rodcoffin.com/index.php?title=Maven_Integration_Testing
안타깝게도 maven-surefire-plugin에는 아직 이 둘을 구분지을 만한 기능이 없습니다. 그럼에도 불구하고 기존에 제공하는 기능들을 잘~ 조합하여 원한 것과 비슷한 결과를 도출해 냅니다. 결코 원하던 결과는 아니지만, 뭐 그나마 그래도 다행인 결과이기는 합니다.
결론부터 보자면
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/*WebTest.java</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>test</goal>
</goals>
<phase>integration-test</phase>
<configuration>
<excludes>
<exclude>none</exclude>
</excludes>
<includes>
<include>**/*WebTest.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
이런 식으로 설정해야
<단위 테스트>
mvn test를 실행 할 때 WebTest로 끝나는 자바 파일은 테스트 대상에서 제외하고,
<통합 테스트>
mvn integration-test를 실행 할 때는 모든 WebTest로 끝나는 자바 파일을 포함하여 모든 것들을 다 테스트 합니다.
그나마 다행이라고 한 이유는 통합 테스트를 할 때 단위 테스트를 실행하는 건 시간 상 메모리 상 분명히 오버헤드에 해당하지만, 통합 테스트 자체가 이미 상당량의 시간과 메모리를 잡아 먹을 것이기 때문에, 마치 큰 산에다가 흙 한 줌 더한 꼴로 볼 수 있기 때문이죠. 또 하나 테스트 실패/성공 측면에서 보더라도 이미 단위 테스트 단계를 통과하고 온 것들이라면 이 단계에서 실패할 가능성은 거의 없다고 봐도 무관하겠죠.
그래도 좀.. 잘 나눌 수 있게 sufire:integration-test 같은 골을 추가해주거나, 설정을 좀 더 잘할 수 있게 기능을 추가해줬으면 좋겠습니다.
ps: mutual exclusive 설정 같은걸 추가해주면 안 되남..