kotest에서 빈을 생성자 주입으로 쓰려고 하면, Specs must have a public zero-arg constructor 오류가 발생 할 수 있다.
이 때에는 kotest-extension-spring 모듈이 필요로 하다.
kotest extension spring 라이브러리가 두개가 검색 되곤 하는데, 헷갈리면 안된다.
https://kotest.io/docs/extensions/spring.html
실제 docs를 보면, 1.1.3 버전이 최신이다.
https://mvnrepository.com/artifact/io.kotest/kotest-extensions-spring/4.4.3
위의 라이브러리는 지원이 중단 된 것인지, 이미 오래 전 소스의 라이브러리이고, 실제 kotest repository에는 해당 소스가 없다.
https://github.com/kotest/kotest-extensions-spring
위의 레포지토리가 진짜다.
아, 지난번에도 헷갈려서 test code 작성하다가 삽질 했는데, 오늘도 삽질 엄청나게 했다.
그리고, test 디렉토리 아래 설정을 넣어주는 게 중요하다.
import io.kotest.core.config.AbstractProjectConfig
import io.kotest.extensions.spring.SpringExtension
class ProjectConfig : AbstractProjectConfig() {
override fun extensions() = listOf(SpringExtension)
override val parallelism = 3
}
@SpringBootTest(
classes = [GrpcServerApiApplication::class]
)
@ActiveProfiles("test")
@TestConstructor(autowireMode = TestConstructor.AutowireMode.ALL)
class GrpcHelloServiceTest(
val grpcHelloService: GrpcHelloService
) : AnnotationSpec() {
...
}
위처럼 설정 하면, 실제로 정상적으로 테스트가 성공 하게 되는데, 라이브러리를 잘 못 넣으면 온갖 행동을 해도 안돌아간다.
까먹지 말자.
반응형
'프로그래밍 > Kotlin' 카테고리의 다른 글
자주 사용하는 .editorconfig (0) | 2023.07.24 |
---|---|
kotlin + junit의 생성자 주입시 오류 (0) | 2023.07.21 |
Kotest 기본만 알아보자 (0) | 2023.04.17 |
이펙티브 코틀린 3장 재사용성 (0) | 2022.10.23 |
이펙티브 코틀린 2장 가독성 (0) | 2022.10.13 |