복붙노트

[SPRING] 자바 사용자 정의 주석 다중 주석을 집계합니다.

SPRING

자바 사용자 정의 주석 다중 주석을 집계합니다.

내 휴식 컨트롤러에 대한 테스트 케이스 작성 각 Controller Test 클래스에 대해 다음 주석을 사용합니다.

@WebAppConfiguration
@RunWith(value = SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {WebConfig.class, TestAppConfig.class})

그래서, 나는 자신의 주석 마녀가 이런 주석을 모두 포함하도록 정의하기로 결정했다.

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@WebAppConfiguration
@RunWith(value = SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {WebConfig.class, TestAppConfig.class})
public @interface ControllerTest {
}

그런 다음 모든 ControllerTest 클래스에 하나의 주석 만 사용했습니다.

@ControllerTest
public class XXControllerTest {
}

이 수정 후 테스트가 실패했습니다.

java.lang.IllegalArgumentException: WebApplicationContext is required
    at org.springframework.util.Assert.notNull(Assert.java:115)

다시 작동하게하려면 @RunWith (SpringJUnit4ClassRunner.class)를 Test 클래스에 추가해야했습니다.

@ControllerTest
@RunWith(SpringJUnit4ClassRunner.class)
public class XXControllerTest {
}

내 질문은 @RunWith (SpringJUnit4ClassRunner.class) 주석을 포함하는 동안 내 @ControllerTest 주석이 작동하지 않는 이유입니다. @RunWith 주석에 특별한 것이 있습니까? 또는 나는 무엇인가 놓쳤 느냐?

추신 : 저는 Spring config 클래스에 대해 동일한 접근 방식을 사용합니다.

해결법

  1. ==============================

    1."메타 주석"을 가질 수있는이 메커니즘은 다른 주석으로 주석을 달고 메타 주석을 넣는 클래스에 적용 할 수 있습니다. 이는 스프링 프레임 워크에만 해당되는 것입니다. Java 어노테이션의 표준 기능은 아닙니다.

    "메타 주석"을 가질 수있는이 메커니즘은 다른 주석으로 주석을 달고 메타 주석을 넣는 클래스에 적용 할 수 있습니다. 이는 스프링 프레임 워크에만 해당되는 것입니다. Java 어노테이션의 표준 기능은 아닙니다.

    JUnit은이 메커니즘을 이해하지 못하기 때문에 작동하지 않습니다. @RunWith 주석은 JUnit 주석입니다. JUnit은 @ControllerTest 메타 - 어노테이션에있는 어노테이션을 살펴야한다는 것을 이해하지 못한다.

    따라서이 메커니즘은 Spring에 의해 처리되는 주석과 함께 작동하지만 JUnit과 같은 다른 도구에 의해 처리되는 주석과는 작동하지 않습니다.

  2. ==============================

    2.봄 주석에서 메타 주석을 만드는 것은 스프링 기능이며 @RunWith는 JUnit 주석입니다.

    봄 주석에서 메타 주석을 만드는 것은 스프링 기능이며 @RunWith는 JUnit 주석입니다.

  3. from https://stackoverflow.com/questions/33345605/java-custom-annotation-aggregate-multiple-annotations by cc-by-sa and MIT license