2017-02-18 3 views
1

나는 @Autowired 필드가있는 테스트 사례가 있습니다. 테스트 케이스를 설정하는 한 가지 방법을 원합니다. 동일한 생성 된 데이터에 의존하는 많은 메소드 (예 : 자동 와이어 된 클래스가 필요함)가 많은 @Test입니다.@ Before/@ BeforeClass를 @Autowired 필드와 함께 사용하는 방법

이 작업을 수행하는 좋은 방법은 무엇입니까?

내가 @BeforeClass 인 경우 autowiring을 중단하는 정적 메서드를 만들어야합니다.

+0

잘 알려진 다른 프레임 워크에 외부 종속성을 추가 할 수 있습니까? –

+0

@ GrzegorzGórkiewicz : 물론, 당신은 무엇을 제안하고 있습니까? – carlspring

+1

다른 솔루션을 추가했습니다. –

답변

2

1 솔루션

대신 사용 TestNG.
@Before* 주석은 TestNG에서 this way으로 동작합니다.
@Before*으로 주석 된 메소드는 정적이어야합니다. 당신이 그렇게하지 않으려면

@org.testng.annotations.BeforeClass 
public void setUpOnce() { 
    //I'm not static! 
} 

2 솔루션

, 당신은 an execution listener from Spring (AbstractTestExecutionListener)를 사용할 수 있습니다.

당신은 다음과 같이 테스트 클래스에 주석을해야합니다 :이 방법으로 CustomTestExecutionListener을 구현 한 후

@TestExecutionListeners({CustomTestExecutionListener.class}) 
public class Test { 
    //Some methods with @Test annotation. 
} 

과 :

public void beforeTestClass(TestContext testContext) throws Exception { 
    //Your before goes here. 
} 

자가 포함 된 하나 개의 파일과 같습니다

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = {"commonContext.xml" }) 
@TestExecutionListeners({SimpleTest.class}) 
public class SimpleTest extends AbstractTestExecutionListener { 

    @Override 
    public void beforeTestClass(TestContext testContext) { 
     System.out.println("In beforeTestClass."); 
    } 

    @Test 
    public void test() { 
     System.out.println("In test."); 
    } 
} 
+0

이것은 훌륭해 보이지만 내 프로젝트 전체에는'JUnit' 테스트가 있는데 나는 그들을 버리려고하지 않았습니다. – carlspring

+1

@carlspring, 그 이유는 Spring에서 다른 답변을 추가 한 이유입니다 (두 번째 솔루션을 선택하는 경우 TestNG를 사용할 필요가 없습니다); –

+0

테스트 클래스 자체가 리스너가 될 수 있습니까? – carlspring

0

나는 별도의 initializat를 만드는 해결책을 내놓았다. 이온 법 (setUp 아님)은 @PostConstruct으로 주석 처리됩니다. 이것은 실제로 우아한 해결책은 아니지만 autowired/injected 필드가 정적으로 @BeforeClass 주석이 달린 메소드의 초기 문제 인 스프링을 사용하기 전에 적절히 초기화되는지 확인합니다.

관련 문제