복붙노트

[SPRING] 자바 주석 - 코드 단순화

SPRING

자바 주석 - 코드 단순화

다음 코드를 단순화 할 방법을 찾고 있습니다.

@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {
        // My configuration classes
})
public class MyServiceTest {
    @Autowired
    private MyService service;

    @Test
    public void myTest() {
        Assert.assertTrue(service != null);
    }
}

많은 구성 클래스가 있으며 각 테스트 클래스에이 클래스를 넣고 싶지 않습니다. 그래서 나는 내 자신의 주석을 만들 생각을 가지고있다 :

@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {
        // My configuration classes
})
public @interface IntegrationTests {
}

나는 그것을 다음과 같은 방법으로 사용하려고 노력한다 :

@IntegrationTests
public class MyServiceTest {
    @Autowired
    private MyService service;

    @Test
    public void myTest() {
        Assert.assertTrue(service != null);
    }
}

하지만 작동하지 않습니다. 어떤 생각?

해결법

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

    1.이러한 주석을 수퍼 클래스에 배치 할 수 있습니다.

    이러한 주석을 수퍼 클래스에 배치 할 수 있습니다.

    @WebAppConfiguration
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = {
            // My configuration classes
    })
    public abstract class AbstractIntegrationTest { ... }
    

    .

    public class MyServiceTest extends AbstractIntegrationTest { ... }
    

    또한이 방법을 사용하면 기본 클래스에서 공통적 인 @Autowired 종속성을 선언하고 구체적인 테스트에서 @ContextConfiguration 클래스를 사용자 정의 할 수 있습니다.

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

    2.사용자 정의 작성 주석이 작동하지 않는 이유는 JUnit이 @RunWith를 메타 주석으로 지원하지 않기 때문입니다. 따라서 다음과 같이 주석을 작성할 때 ...

    사용자 정의 작성 주석이 작동하지 않는 이유는 JUnit이 @RunWith를 메타 주석으로 지원하지 않기 때문입니다. 따라서 다음과 같이 주석을 작성할 때 ...

    @WebAppConfiguration
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = { /* configuration classes */ })
    public @interface IntegrationTests {
    }
    

    JUnit은 SpringJUnit4ClassRunner를 사용하고 싶지 않다는 것을 알 수 있습니다.

    스프링 프레임 워크 4.0 이상은 @WebAppConfiguration과 @ContextConfiguration의 선언을 메타 주석으로 사용하는 데 아무런 문제가 없어야합니다.

    즉, 다음과 같은 작업이 필요합니다.

    @WebAppConfiguration
    @ContextConfiguration(classes = { /* configuration classes */ })
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE)
    public @interface IntegrationTests {
    }
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @IntegrationTests
    public class MyServiceTest {
        @Autowired
        private MyService service;
    
        @Test
        public void myTest() {
            assertNotNull(service);
        }
    }
    

    또는 axtavt에서 권장하는 추상 기본 테스트 클래스를 사용할 수 있습니다.

    문안 인사,

    Sam (Spring TestContext Framework 작성자)

  3. from https://stackoverflow.com/questions/24653804/java-annotations-code-simplifications by cc-by-sa and MIT license