>

스프링 부트 테스트에 @BeforeClass 메소드를 갖고 싶습니다.이 메소드는 정적이며 "companion object"에 선언되어 있어야합니다.

@RunWith(SpringRunner::class)
@SpringBootTest
@ActiveProfiles("test")
open class MyTest {
companion object {
    @Autowired
    lateinit var repo: MyRepository
    @BeforeClass
    @JvmStatic
    fun X() {
        user = User()
        repo.save(user)
    }
}

반면에이 방법에서는 자동 와이어 링 된 구성 요소를 사용해야하지만 여기 는 정적 컨텍스트에서는 불가능하며이 오류가 발생했습니다 :

lateinit property repo has not been initialized

이 상황을 어떻게 처리해야합니까?


  • 답변 # 1

    Junit 5로 전환하는 것이 좋습니다. @BeforeAll 를 사용할 수 있습니다.  정적 인 비 정적 방법. 또한 Junit 5 Spring Extension을 사용하면 @BeforeAll 에 종속성을 주입 할 수 있습니다 .

    JUnit 버전을 업데이트하는 방법은 사용하는 빌드 도구 (Maven 또는 Gradle)에 따라 다릅니다. 또한 @RunWith(SpringRunner::class) 를 교체해야합니다   @ExtendWith(SpringExtension::class) 와 함께 .

    또한 속성 파일 src/test/resources/junit-platform.properties 를 만들어야합니다  내용 : junit.jupiter.testinstance.lifecycle.default = per_class . 이것으로, 당신은 @BeforeAll 를 사용하는 데 사용할 수 있습니다  비 정적 방법에 대해.

    많은 것처럼 보이지만 Kotlin과 Spring Boot를 사용하는 경우 JUnit 5가 더 적합합니다.

    참고 : Spring Boot 및 Kotlin을 사용하여 웹 애플리케이션 빌드시JUnit 5로 테스트

관련 자료

  • 이전 javascript - laravel에서 다중 단계 양식 제출 방법이 작동하지 않습니다
  • 다음 vue.js - 소품이 비어 있으면 자녀가 부모 소품을 볼 수 없습니다