2017-11-29 29 views
0

인터페이스에 주석 SpringBootTest을 배치하고 인터페이스에서 상속 받아 테스트를 실행하는 것은 지금 불가능합니다.interfrace에서 @SpringBootTest 주석이 작동하지 않습니다.

@ExtendWith(SpringExtension::class) 
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) 
interface SpringBootTestBase 

class GreetingControllerITest : SpringBootTestBase { 

    @Autowired 
    private lateinit var restTemplate: TestRestTemplate 

    @Test 
    fun `spring boot endpoint gets correct greeting`() { 
     val body = restTemplate.getForObject("/greet/World", String::class.java) 
     assertThat(body).isEqualTo("Hello, World!") 
    } 
} 

이것은 NPE와 함께 실패

Caused by: java.lang.NullPointerException: null 
    at org.springframework.boot.test.context.SpringBootTestContextCustomizer.customizeContext(SpringBootTestContextCustomizer.java:50) ~[spring-boot-test-2.0.0.M6.jar:2.0.0.M6] 
    at org.springframework.boot.test.context.SpringBootContextLoader$ContextCustomizerAdapter.initialize(SpringBootContextLoader.java:326) ~[spring-boot-test-2.0.0.M6.jar:2.0.0.M6] 
    at org.springframework.boot.SpringApplication.applyInitializers(SpringApplication.java:625) ~[spring-boot-2.0.0.M6.jar:2.0.0.M6] 
    at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:365) ~[spring-boot-2.0.0.M6.jar:2.0.0.M6] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:325) ~[spring-boot-2.0.0.M6.jar:2.0.0.M6] 
    at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:138) ~[spring-boot-test-2.0.0.M6.jar:2.0.0.M6] 
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99) ~[spring-test-5.0.1.RELEASE.jar:5.0.1.RELEASE] 
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:117) ~[spring-test-5.0.1.RELEASE.jar:5.0.1.RELEASE] 
    ... 61 common frames omitted 

, 인터페이스에 대한 모든 주석을 넣어 우리의 모든 테스트는 하나에서 상속하도록하는 것입니다이 인터페이스에 대한 이유 -> 피 주석 코드 중복

대신 기본 클래스를 사용하면 테스트 관련이 아닌 다른 기본 클래스가 상속되므로 인터페이스가 실제 옵션이 아닙니다.

스프링 커뮤니티에 가져와야 할 유용한 기능입니까?

답변

2

맞습니다. 스프링 부트는 현재 인터페이스에서 테스트 관련 주석을 검색하지 않습니다.

유용하다고 생각되면 봄 부팅 용으로 GitHub issue을 열어주세요.

한편, 주석 복제를 피하는 것이 주된 목표라면, 스프링과 JUnit Jupiter 코어가 모두으로 구성된 을 지원하기 때문에 이미 지원됩니다.

스프링, 스프링 부트 및 JUnit 목성 주석을 결합하는 구체적인 예는 내 spring-events 샘플 프로젝트의 @SpringEventsWebTest 주석을 살펴보십시오.

감사합니다,

샘 (스프링 TestContext 프레임 워크의 저자 핵심 JUnit을 5 커미터)