일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- redis + spring boot 함께
- 자바
- insert
- docker 컨테이너로 띄우기
- aws elasticache 활용
- 만들면서 배우는 클린 아키텍처
- mysql
- Docker Compose
- 자바스크립트
- Java
- javascript
- architecture
- js
- select
- 리눅스
- 톰캣
- catalina.out
- 엔티티 코드 치환
- Linux
- 정규식
- Tomcat
- feignClient
- Entity Code 치환
- 특수문자 치환
- sftp
- springboot+redis
- jQuery
- for문
- 초단위
- 제이쿼리
- Today
- Total
꾸준하게, 차근차근
[Error] No matching tests found in any candidate test task. 본문
회사 업무에 적응하기도 바쁘지만, 바쁘다고 자기계발에 소홀하면 안되지!
그 덕에 점점 일만 벌리고 있는 것 같지만 🤣🤣
친한 동생과 내년 상반기를 목표로 토이 프로젝트를 진행하기로 했고, 퇴근 후 틈틈이 개발해서 테스트 코드 작성 단계까지 도달했다. (나는 TDD가 잘 안돼 🤣)
하지만 뭐든 쉽게 넘어가는 법이 없는게 세상의 이치 🧐 는 테스트 코드를 실행하면서 발생했다.
1. 문제 상황
테스트 코드를 작성하고 실행하는데 아래와 같은 에러 로그가 찍히면서 테스트 코드가 정상 동작하지 않는 것!
자, 어디서 또 삽질하는 소리가 들리지 않는가...
2. 해결 방법
2.1. IntelliJ 설정 수정
GPT에게 물어보고(비록 헛소리로 하나도 도움이 되지 않았음 🤬), 구글링도 해보고 해서 찾은 첫번째 방법이 IntelliJ 설정을 변경하는 것이었다.
해당 설정값을 Gradle (Default) -> IntelliJ IDEA로 변경하는 것!
위와 같이 변경하니 에러는 사라졌고, 테스트 코드도 문제 없이 실행되었다.
현재 맡은 도메인 개발이 거의 마무리되어 오늘 PR까지 생성하고 마무리하는게 목표였는데 코드를 정리하는데 무언가 이상했다. 😳
갑자기 잘 설정해둔 Q클래스가 외부 경로에 생성되어 있질 않나, QueryDSL의 Q클래스가 동일 경로에 두 번 이상 생성되어 중복 생성 시도로 인한 에러가 발생하질 않나 😮💨
거기다 테스트 코드를 실행할 때마다 JUnit Run Configurations가 중복해서 생성되고 있는 것이었다.
원인을 정확하게 분석하지는 못했지만, 예상컨대 테스트 코드를 실행할 때마다 빌드와 실행이 누적된게 아닐까 싶다.
그러다보니 설정도 꼬이고 코드도 꼬이고 내 머리도 꼬이고 😱
다른 방법이 필요했다.
2.2. build.gradle 설정
StackOverflow에 게시되어 있는 IntelliJ 2019.1 업데이트로 인해 JUnit 테스트가 중단되었다는 글을 보게 되었다.
첫번째 댓글은 IntelliJ 설정 변경 방법과 똑같은 내용이었고, 그 다음으로 눈에 띈 댓글이 현재 작성 중인 build.gradle 설정 방법이다.
build.gradle에 아래와 같이 설정을 추가한다.
test {
useJUnitPlatform()
}
위와 같이 설정하니 JUnit Run Configurations도 중복 생성되지 않았고, 꼬이고 꼬였던 QueryDSL 이슈도 말끔히 사라졌다. 🤣🤣🤣
해당 게시글은 아래와 같다.
https://stackoverflow.com/questions/55405441/intelij-2019-1-update-breaks-junit-tests
해결하고 다시 게시글을 확인해보니 생각보다 오래된 게시글이었다?? 😶
3. 궁금증
3.1. 이전 설정을 적용하면?
갑자기 궁금해졌다. 🤔
2019.1 업데이트로 인해 JUnit 테스트가 중단되었는데 올해 상반기에 생성한 프로젝트는 이런 문제가 없었단 말이지?
상반기에 생성한 프로젝트에서 테스트 관련 설정을 옮겨와 적용해봤다.
tasks.named('test') {
useJUnitPlatform()
}
잘 된다. 😳😳😳😳
뭐야?? 😶
3.2. 에러가 맞을까?
지금 진행하고 있는 프로젝트의 초기 설정 담당이 아니라 어떻게 된건지 혼란스러웠다.
현재 시점의 초기 프로젝트 설정을 확인해야 했다.
Spring Initializr 홈페이지에 접속해서 프로젝트를 하나 생성해봤는데....
😶
동생이 QueryDSL 설정하면서 테스트 관련 설정을 지웠나봐 🤣
너무 멀리 돌아왔다... 내 다크써클...
4. 참고
어차피 여기까지 돌아온 김에 내용을 정리해보자면,
2019.1 이전에는 Gradle이 JUnit 4 Runner로 테스트를 실행했다.
하지만 이후 버전부터는 Gradle이 JUnit Platform(5) 기반으로 테스트를 실행하는 것이 표준이 되면서, 명확하게 useJUnitPlatform()을 지정하지 않으면 Gradle이 JUnit 4/5 혼합 프로젝트에서 테스트를 찾지 못하거나 에러가 발생할 수 있었다.
IntelliJ의 Run/Debug도 "JUnit Platform"기반으로 동작하기 때문에 반드시 useJUnitPlatform()을 지정해야 프로젝트 전반에서 일관된 테스트 실행을 보장 받을 수 있었다.
따라서 이러한 이유로 Gradle이 모든 테스트를 JUnit 5(Platform) 기반으로 실행하도록 강제하는 설정이 IntelliJ 2019.1+의 테스트 정책 변화와 맞물려 반드시 필요한 설정이 된 것이다.