JVM/Kotlin

[kotlin] kotest After/before each not working for withData

Hyo Kim 2022. 12. 27. 10:00
728x90
반응형

😏 서론

글작성 기준

kotest version 5.5

 

data-driven test를 위해 withData를 사용했을 때 afterEach / beforeEach가 예상과 달리 동작하지 않았다.


🤩 본론

간단하게 kotest의 TestType부터 살펴보고 넘어가보자면..

Type Description
Container 다른 테스트를 포함할 수 있는 컨테이너
Test 중첩 테스트를 포함할 수 없는 리프 테스트
Dynamic Container, Test 둘 다 일 수 있으며, Propery test, data test와 같은 기능을 통해 테스트가 동적으로 추가될 때 사용

 

withData

withData는 보다시피 TestType이 Dynamic을 사용하고 있다.

공식문서에서 나온 내용으로 살펴보자면 Dynamic은 모든 테스트 타입에서 동작해야 한다.

 

before / after each

그림에 나온 befor/after each는 TestType.Test이고, Dynamic도 당연하게 실행이 되어야 된다고 생각했다.

하지만 예상과 다르게 동작하지 않았고 해당 코드를 따라가보니..

beforeTestBeforeAnyBeforeContainer

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를 사용하면 된다!

 

피드백은 언제나 환영입니다 :)

 

참고

728x90
반응형