2014-11-07 7 views
1

dbunit을 사용하여 시스템의 데이터베이스를 테스트하려고합니다. 여러 테스트 케이스는 동일한 데이터 세트를 사용하여 테스트 할 수 있으므로 모든 테스트 케이스를 한 번 초기화해야합니다. 하지만 나는 또한 db 커넥션 파라미터를 초기화하기 위해 @AutoWire 봄을 사용한다.정적 @BeforeClass를 사용하지 않고 dbunit 데이터 셋업을 설정/해제하는 방법

@BeforeClass와 @AfterClass를 사용하여 db를 설정하려고했습니다. 그러나 @Autowire는 클래스가 시작될 때 발생합니다 (자동 와이어 정적 멤버에게는 작동하지 않는 것 같음).

궁금한 점이 있다면 테스트 케이스 전후에 db 데이터 세트를 설치/해체 할 수있는 다른 방법이 있습니까? 이 포스트는 기본적으로 이벤트를 트리거 유닛 테스트에 주자를 변경하는 방법을 설명

How to allow instance methods to run as JUnit BeforeClass behavior

:

나는 하나의 우아한 해결책을 찾아 냈다. 봄에는 AbstractTestExecutionListener도 사용할 수 있습니다.

답변

0

ApplicationListener 인터페이스를 사용하여 데이터베이스를 초기화하면됩니다. 이 질문을보십시오 : How to add a hook to the application context initialization event? onApplicationEvent 메소드의 모든 데이터를 작성할 수 있습니다.

어쨌든하고 DBUnit을 사용하지 않는, 바로 그래서 코드는 다음과 같이 될 것이다 ClassMode=AfterEachTestMethod 를 사용하여 (클래스 수준에 DirtiesContext) @Transactional 및 @DirtiesContext과 모든 테스트를 만들 : 나는 또한 사용

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration({ "classpath:testContext.xml" }) 
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) 
public class YourTestClassTest { 
    //... 
} 
+0

위에 게시 된 해결책을 찾았습니다. 당신의 도움을 주셔서 감사합니다. 하지만 두 인스턴스 수준 beforeclass 및 afterclass 찾고 있어요. –

0

을 내 통합 테스트를위한 DBUnit 및 @ BeforeClass/@ AfterClass 대신 @Before 및 @After 주석이있는 메소드 내에서 데이터를 설정/분리합니다. 각 테스트는 새로 고친 테스트 데이터를 가져옵니다.

단일 테스트의 각 테스트 또는 다른 대체에 다른 데이터 세트를 사용하려면 @Test 주석이 달린 메소드의 첫 번째 행으로 setup (dataSet) 또는 setup (replaceList) 메소드를 호출 할 수도 있습니다 (@ 주석을 작성하기 전에).