상황
@WebMvcTest(TestController::class)
class TestControllerTest @Autowired constructor(
private val testService: TestService
) : DescribeSpec({
describe("---") {
context("---") {
it("---") {
---
}
}
}
})
Kotest DCI 패턴을 적용하여 테스트를 진행하려고 테스트 코드를 작성하는 과정에서 생성자를 통해 빈을 주입 받으니 다음과 같은 에러가 발생했다.
io.kotest.engine.spec.SpecInstantiationException: Could not create instance of class kr.weit.odya.controller.test.TestControllerTest. Specs must have a public zero-arg constructor.
원인
Kotest에서 Specs(테스트 스펙)은 public-zero-arg(인자가 없는) 생성자를 가져야 한다. 따라서, Kotest를 사용하면서 생성자를 통해 빈을 주입하려고 할 때, 발생하게 된다.
💥 Kotest는 Reflection을 사용하여 테스트 클래스의 인스턴스를 동적으로 생성하는데, Reflection은 public zero-arg 생성자를 필요로 하기 때문에 발생한다.
해결 방법
testImplementation("io.kotest.extensions:kotest-extensions-spring:1.1.2")
해당 의존성은 Kotest와 Spring 프레임워크를 통합하여 사용할 수 있는 확장 기능을 한다.
따라서, 해당 의존성을 설정해야 @Autowired와 같은 Spring 기능 등을 사용해서 테스트를 진행할 수 있다.
'트러블 슈팅' 카테고리의 다른 글
클라이언트-서버 cookie 사용 문제 (0) | 2023.06.07 |
---|---|
Jpa Validate 에러 (with. Oracle DB, h2) (0) | 2023.05.30 |
Kotlin + Spring DTO에서 NotNull 변수의 null Validation (1) | 2023.05.18 |
[Junit5] JPA metamodel must not be empty! (0) | 2022.11.22 |
[Junit5] org.mockito.exceptions.misusing.MissingMethodInvocationException (0) | 2022.11.21 |