programing

Spring Boot 어플리케이션용 JUnit @BeforeClass 비정적 대응

closeapi 2023. 4. 6. 21:41
반응형

Spring Boot 어플리케이션용 JUnit @BeforeClass 비정적 대응

JUnit의@BeforeClass주석을 1회 실행하려면 주석을 정적으로 선언해야 합니다.@Test방법들.그러나 종속성 주입에는 사용할 수 없습니다.

데이터베이스를 정리하고 싶다.@AutowireJUnit 테스트를 실행하기 전에 스프링 부츠에 접속해 주세요.나는 못한다.@Autowire정적인 필드 때문에 다른 방법을 생각해내야 합니다.좋은 생각 있어요?

(데이터베이스 초기화 방법에 따라) 대신 (또는 Spring)을 사용합니다.이 주석은 비정적 공개 메서드에 연결해야 합니다.

물론입니다.@Before각 테스트 사례 방법보다 먼저 실행(같지 않음)@BeforeClass1회만 실행됩니다.)그러나 정확히 한 번 실행하려면 정적 마커 필드를 사용하십시오.

private static boolean initialized = false;
...
@Before
public void initializeDB() { 
   if (!initialized) {
       ... //your db initialization
       initialized = true;
   }
}
---

의 경우: 테스트 실행 순서 및@TestInstance(Lifecycle.PER_CLASS)

Kotlin의 예:

@ExtendWith(SpringExtension::class)
@TestInstance(PER_CLASS)
class BeforeInstanceTests {

    private var initialized: String = ""
    private val callList: MutableList<String> = ArrayList()

    @BeforeAll
    fun beforeAllNonStatic() {
        initialized = "initialized"
        assertEquals(0, callList.size)
    }

    @Test
    fun test1() {
        assertEquals("initialized", initialized)
        callList.add("test1")
    }

    @Test
    fun test2() {
        assertEquals("initialized", initialized)
        callList.add("test2")
    }

    @Test
    fun test3() {
        assertEquals("initialized", initialized)
        callList.add("test3")
    }

    @AfterAll
    fun afterAllNonStatic() {
        assertEquals("initialized", initialized)
        assertEquals(3, callList.size)
        assertTrue(callList.contains("test1"))
        assertTrue(callList.contains("test2"))
        assertTrue(callList.contains("test3"))

        callList.clear()
        initialized = ""
    }
}

DBUnit 라이브러리를 참조하십시오. DBUnit 라이브러리는 사용자가 설명하는 작업을 수행하도록 설계되었습니다.데이터베이스 인스턴스를 작성 및 해체할 수 있으며 이를 위한 간단한 방법을 제공합니다.

받아들여진 답변은 영리하지만, 해킹한 것처럼 보인다.일반 컨스트럭터를 사용해 본 적이 있습니까?

public class MyJUnitTest {

    public MyJUnitTest() {
       // code for initializeDB
    }

    // Tests

}

다음 솔루션을 사용해 보십시오.https://stackoverflow.com/a/46274919/907576 :

와 함께@BeforeAllMethods/@AfterAllMethods주입된 모든 값을 사용할 수 있는 인스턴스 컨텍스트의 테스트 클래스의 모든 메서드를 실행할 수 있는 주석.

언급URL : https://stackoverflow.com/questions/32952884/junit-beforeclass-non-static-work-around-for-spring-boot-application

반응형