Test코드에서 간단하게 RuntimeException을 테스트하였고 분명 runApp에서는 문제가 없었다. 하지만,
빌드를 돌려보니 아래처럼 Exception이 유발되면서 Build Failed가 뜨는 것이였다.
java.lang.RuntimeException: 이미 가입되어 있는 유저입니다. 아이디 중복
at com.rktpdyfk.TradingMatchingService.service.UserService.signup(UserService.java:53)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:352)
해당 테스트 코드를 지워야하나 고민하던 중 앞으로도 이런 문제가 발생할 수 있어서 간단한 해결법과 다른 방법들도 찾아보았다.
Command 명령어 옵션(플래그)을 사용한 방법
-x option을 사용해 build 해보자.
gradle build -x test
간단하게 test 코드를 컴파일되지 않을거고, 실행조차 하지않아 build가 된다. 당장 build가 필요할땐 유용해보인다.
gradle.build에 코드 삽입하는 방법
스킵할 테스트코드를 someProperty로 설정하고
test.onlyIf { !project.hasProperty('someProperty') }
gradle build 시 someProperty는 패쓰시킨다.
gradle build -P someProperty
그냥 간단하게 아래처럼 test로 설정하고 일반 build해줘도 통과된다.
test.onlyIf {
!project.hasProperty('test')
}
나아가, 특정 패키지나 클래스 네임으로 빌드 시, 테스트를 배제시키는 방법이 있다.
//특정 경로의 하위디렉토리나 특정 네임의 클래스를 배제
test {
exclude 'org/boo/**'
exclude '**/Bar.class'
}
//가장 뒤에 있는 키워드로 배제
test {
exclude '**/**Integration'
}
결론
앞으로 build할때 Test code로 인한 failed는 해결할 수 있게 되었다. 하지만, 스프링 기본기 부족으로 구현한 테스트 코드의 내용이 잘못된거였는지 알 수가 없었다. 애초에 build failed 가 일어나지 않게 구현해야 하는게 아닌가 의구심이 든다. 이후 테스트 코드를 학습한 후 다시 확인해봐야겠다.
https://www.baeldung.com/gradle-skip-tests