😏 서론
글작성 기준
kotest version 5.5
data-driven test를 위해 withData를 사용했을 때 afterEach / beforeEach가 예상과 달리 동작하지 않았다.
🤩 본론
간단하게 kotest의 TestType부터 살펴보고 넘어가보자면..
Type | Description |
Container | 다른 테스트를 포함할 수 있는 컨테이너 |
Test | 중첩 테스트를 포함할 수 없는 리프 테스트 |
Dynamic | Container, Test 둘 다 일 수 있으며, Propery test, data test와 같은 기능을 통해 테스트가 동적으로 추가될 때 사용 |
withData는 보다시피 TestType이 Dynamic을 사용하고 있다.
공식문서에서 나온 내용으로 살펴보자면 Dynamic은 모든 테스트 타입에서 동작해야 한다.
그림에 나온 befor/after each는 TestType.Test이고, Dynamic도 당연하게 실행이 되어야 된다고 생각했다.
하지만 예상과 다르게 동작하지 않았고 해당 코드를 따라가보니..
TestType이 Dynamic이 실행된다는 부분은 어디에도 보이지 않았다.
그래서 어 나도 오픈소스에 이슈를 남겨볼 기회인가?! 하고 kotest를 들어가보니..
https://github.com/kotest/kotest/pull/3300
Invoking After/before each for dynamic tests by Kantis · Pull Request #3300 · kotest/kotest
fixes #3290 Invokes beforeEach / afterEach between each case of a data-driven test (withData)
github.com
이미 논의 중인 내용이었다.
6.0에 적용될 내용으로 이야기가 되고 있는 걸로 보이는데
단순히 each메소드에 추가할지, 다른 메소드를 만들지는 논의하고 있는 것 같다.
https://github.com/kotest/kotest-extensions-spring/pull/23
Run Spring lifecycle before/after for TestType.Dynamic by Kantis · Pull Request #23 · kotest/kotest-extensions-spring
Closes kotest/kotest#2899
github.com
스프링 테스트 쪽에서는 수정했는데 아마 kotest에서 단순히 수정하기에는
이미 이렇게 사용중인 곳들에 대해서도 영향이 가기 때문에 바로 변경하지는 못하는 걸로 보인다.
아쉽지만.. 오픈소스 컨트리뷰어는 다음 기회에.....
🫡 결론
withData와 같은 data-driven test를 진행할 때 after/before를 사용할 일이 있다면
일단은 after/before any 혹은 after/before test를 사용하면 된다!
피드백은 언제나 환영입니다 :)
참고
'JVM > Kotlin' 카테고리의 다른 글
[Coroutines] Dispatchers 알아보기 (2) | 2023.10.13 |
---|---|
Kotest 5.1 이상 버전 java.lang.NoClassDefFoundError: kotlinx/coroutines/test/TestDispatcher 해결방법 (0) | 2022.11.29 |
[Kotlin] 코틀린 학습 시작! (0) | 2022.09.08 |