2012-09-23 2 views
5

각 테스트마다 다음 주석을 포함하는 Spring Junit Support로 실행되는 많은 테스트 케이스가 있습니다.Spring + JUnit Test Config 주석이있는 사용자 정의 주석을 작성하고 사용하는 방법은 무엇입니까?

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations="classpath:spring/applicationContext.xml") 
@TransactionConfiguration(transactionManager="transactionManager") 
@Transactional 
@ActiveProfiles("test") 

각 테스트 클래스에 이러한 주석을 모두 두는 대신 사용자 지정 주석을 만들어 사용하고 싶습니다.

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations="classpath:spring/applicationContext.xml") 
@TransactionConfiguration(transactionManager="transactionManager") 
@Transactional 
@ActiveProfiles("test") 

@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE }) 
@Retention(RetentionPolicy.RUNTIME) 
@Inherited 
public @interface SpringJUnit4TestConfig { 

} 

하지만이 사용자 정의 주석 봄 주입이 전혀 발생하지 않습니다 사용할 때.

@SpringJUnit4TestConfig 
public class UserServiceTest 
{ 
} 

내가 여기에 누락 되었습니까?

추신 : 하지만 JUnit의 @RunWith와 Spring의 @Transactional, @ContextConfiguration 모두 @ Inherited .. 그래서 나는 그것이 작동해야한다고 생각했습니다. 하지만 지금은 해결 방법을 통해 해결할 수 있습니다. Based Abstract 클래스를 생성하고 그 모든 Annotation을 그 Base 클래스를 확장하는 테스트 케이스에 넣습니다.

+0

@Target ({ElementType.TYPE}) 만 사용해야합니다. 필드 또는 매개 변수에이 코드를 사용하지 않습니까, 그렇지 않습니까? – Koitoer

+0

당신이 옳습니다. 이 커스터마이징 어노테이션은 ElementType.TYPE에만 적용되어야합니다. –

+0

나는 똑같이하고 싶었다. 질문과 답변 읽기'@ RunWith'를 제외한 모든 구성을 사용하는 주석을 작성하여 지금까지는 훌륭하게 작동하는 것 같습니다. 나는 각 TestCase 클래스에서'@RunWith (SpringJUnit4ClassRunner.class)'를 사용한다. – ykesh

답변

2

@RunWith이 JUnit 주석이므로이 접근 방식이 작동하지 않을 것이라고 생각합니다. JUnit 주석이 작동하려면 JUnit 주석이 전이 적이어야합니다. 클래스가 @RunWith 주석 또는 @RunWith 주석 클래스를 연장

, JUnit을은 대신의 JUnit에 내장 된 주자의 클래스에서 테스트를 실행하기 위해 참조하는 클래스를 호출합니다. 우리는이 기능을 개발 후반부에 추가했습니다. 강력한 것처럼 보이지만 러너 API가 사람들이 실제로 어떻게 사용 하는지를 배울 때 러너 API가 바뀔 것으로 기대합니다. 현재 내부에있는 수업 중 일부는 세련되고 공개됩니다.

테스트 JUnit 테스트 호출은 상속 된 클래스에서만 작동하는 것 같습니다. 봄에 관해서는

, 그것은 (당신이 그렇지 않으면 생각하는 경우, 문서를 날 지점하시기 바랍니다) 사실,이 내가 아주이 다른 주석 유형에 대한 작업을해야 모르겠어요, 구성 위치에 대한 context configuration inheritance라는 것을 지원 이 경우에는 @Transactional 주석 자체가 @Inherited으로 선언되어 있기 때문에 테스트 구성 클래스 상속의 경우 다른 주석에도 사용할 수 있습니다.

이 경우 JUnit 주석이 없어져서 실행되지 않습니다.

관련 문제