Spring Boot 어플리케이션용 JUnit @BeforeClass 비정적 대응
JUnit의@BeforeClass
주석을 1회 실행하려면 주석을 정적으로 선언해야 합니다.@Test
방법들.그러나 종속성 주입에는 사용할 수 없습니다.
데이터베이스를 정리하고 싶다.@Autowire
JUnit 테스트를 실행하기 전에 스프링 부츠에 접속해 주세요.나는 못한다.@Autowire
정적인 필드 때문에 다른 방법을 생각해내야 합니다.좋은 생각 있어요?
(데이터베이스 초기화 방법에 따라) 대신 (또는 Spring)을 사용합니다.이 주석은 비정적 공개 메서드에 연결해야 합니다.
물론입니다.@Before
각 테스트 사례 방법보다 먼저 실행(같지 않음)@BeforeClass
1회만 실행됩니다.)그러나 정확히 한 번 실행하려면 정적 마커 필드를 사용하십시오.
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
'programing' 카테고리의 다른 글
Excel 2007 VBA에서 Excel 워크시트의 맨 위 행을 프로그램 방식으로 고정하려면 어떻게 해야 합니까? (0) | 2023.04.11 |
---|---|
SQL Server에서 LIMIT를 구현하는 방법 (0) | 2023.04.11 |
[ Typescript ]에서 유형과 인터페이스의 차이점은 무엇입니까? (0) | 2023.04.06 |
마음에 드는 SQL*Plus 힌트 및 요령 (0) | 2023.04.06 |
스프링 부팅이 maven-surefire-plugin ClassNotFoundException org.apache.maven을 실행할 수 없습니다.확실해요.booter.ForkedBooter (0) | 2023.04.06 |