개발 환경
ㄴ springBoot : 2.4.13
ㄴ spock : 1.2
ㄴ groovy : 2.4.1
ㄴ gradle : 3.7
PR을 올리면 CI 서버에서 자동으로 테스트 코드를 수행하게 되는데, 어느날 배포나간 테스트 코드를 IDE에서 실행해보니 깨지는 것을 발견했다. 애초에 테스트가 통과되지 않는 코드인 것인데 CI 서버에서는 어찌 통과를 했던 것일까?
한참을 삽질을 하던 나는 IDE 에서의 직접 테스트코드 실행이 아닌 그래들 래퍼로 test task를 실행하였을 때 재현이 되는 것을 발견했다.
./gradlew test 실행시 테스트코드가 실행되지 않고 SUCCESS가 되는 것...!
$ ./gradlw test
BUILD SUCCESSFUL in 10s
테스트할 클래스를 명시적으로 지정을 하면 테스트 코드를 찾을 수 없다는 오류를 만날 수 있다.
$ ./gradlew test --tests paymentTest
> Task :test FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':test'.
> No tests found for given includes: [paymentTest](--tests filter)
...
결론은 springBoot 버전 변경이 문제였다.
# before
plugins {
id 'org.springframework.boot' version '2.3.0.RELEASE'
}
# after
plugins {
id 'org.springframework.boot' version '2.4.13'
}
왜 발생했을까?
구글링 결과 Spring Boot 2.4 로 업그레이드되면서 Vintage Engine에 대한 의존성이 빠지게 되었다는 내용을 보게 되었다.
현재 Spock 버전은 junit4와 의존성을 지닌다. 따라서 Junit4 기반 설정을 해줘야 한다. 하지만 vintage-engine이 빠져버린 것이다.
정리해보자면 아래와 같다.
- SpringBoot 2.2.X 부터 Junit5가 기본적으로 탑재되어 있음
- SpringBoot 2.3.0.RELEASE 때는 호환성을 위해 Vintage Engine 이 존재하였지만 2.4 부터는 Vintage Engine 이 존재하지 않아 테스트코드가 동작하지 않았음
vintage-engine 과 junit4의 관계가 이해되지 않는 사람들을 위해서 Junit5 모듈에 관해 간략히 설명한다.
Junit5는 세 개의 서브 프로젝트로 이루어진다.
- Junit Platform - JVM에서 테스트 프레임워크를 시작하기 위한 기반을 제공
- Junit Jupiter - Junit5를 위한 테스트 API와 실행엔진 제공
- Junit Vintage - 하위 호환성을 위해 Junit3, 4 로 작성된 테스트를 Junit5에서 실행하기 위한 모듈 제공
// juninit5
Spock은 Junit4와 의존성 -> Junit-vintage lib가 필요 이렇게 되는 것이다.
해결법은?
고생한거에 비해 간단한다. junit-vintage-engine 을 추가해주면 끝
testRuntimeOnly('org.junit.vintage:junit-vintage-engine')
+++
mocikto-core 3.7 이상부터 static method 테스트를 지원함
junit5, junit4, spock 혼용 사용 가능 (별도 클래스)
No Tests found for given includes
'프로그래밍 노트 > 트러블슈팅' 카테고리의 다른 글
[Kafka] 카프카 중복 메시지 발생 원인 삽질노트 (0) | 2023.04.04 |
---|---|
[Spock] MockBean 객체가 정상동작하지 않는 경우 (0) | 2022.02.21 |
[Mybatis] 동적 쿼리 DBMS별 Like 문 (0) | 2019.07.12 |
[Maven] error resolving version for plugin from the repositories ... 오류 (0) | 2019.03.26 |
AES256 암호화시 java.security.InvalidKeyException: Illegal key size 해결방안 (3) | 2019.03.06 |