내 블로그를 보면 굉장히 여러가지 theme의 글이 올라오는데, 난 사실 코프링 개발자다..ㅋㅋ
최근 들어 Kotest
를 활용하여 테스트를 짜고 있는데, 제공되는 다양한 Spec
이 테스트의 가독성을 굉장히 높여준다.
하지만 이 Spec
을 사용할 때에는 그에 따른 라이프사이클 훅을 잘 알고 사용하는 것이 중요하다.
공식 문서에도 (영어로) 잘 설명되어있다.
각각의 Callback에 대해서 이야기해보자면 다음과 같다.
TestType.Container
유형의 각 테스트가 실행되기 전에 호출된다. 테스트가 비활성된 경우에는 해당 콜백이 호출되지 않는다. afterContainer는 테스트 케이스가 실패하더라도 호출된다. Container
라 함은, BehaviorSpec
을 예로 들었을 때 Given - When - Then
한 세트를 말한다.TestType.Test
유형의 각 테스트가 실행되기 직전/직후에 호출되며, afterEach는 테스트 케이스가 실패하더라도 호출된다.Test
라 함은, BehaviorSpec
을 예로 들었을 때 Then
을 말한다.TestCase
를 파라미터로 하여 호출된다. 공식 문서에도 beforeAny, beforeTest는 동일하게 동작한다고 되어있다. (after도 마찬가지)Spec
을 인스턴스화 한 후 호출된다. 만약 스펙이 여러 번 인스턴스화되는 경우에는 해당 스펙에 대한 첫번째 테스트가 실행되기 직전에 생성되는 각 인스턴스에 대해 호출된다. 이는 새 사양 인스턴스가 생성될 때마다 설정을 수행해야하는 경우 사용해야한다. 클래스 파일당 한번만 설정해야하는 경우엔 prepareSpec
이 더 적절하다. 이는 beforeTest
가 호출되기 전에 호출되기 때문이다. BehaviorSpec
을 예로 들자면 Given - When - Then
의 여러쌍 전체의 before과 after라고 이해하면 된다.여기서 좀 더 헷갈리는 게 있는데, 만약 mockk
를 함께 사용한다면 행동을 정의하는 every
와 검증하는 verify
는 같은 테스트 안에 속해있어야 정상적으로 동작한다. 하지만 이것은 완벽히 확인된 바는 아니므로 좀 더 확인해본 후 새로운 글로 올릴 예정.. (혹시나 lifecycle 때문에 문제가 발생하는 경우 이게 해결 방법이 될 수도 있어서 적어둔다.)