복붙노트

[SPRING] 스프링 응용 프로그램 컨텍스트가 시작되지 않는지 테스트하는 가장 좋은 방법은 무엇입니까?

SPRING

스프링 응용 프로그램 컨텍스트가 시작되지 않는지 테스트하는 가장 좋은 방법은 무엇입니까?

나는 spring-boot-starter-web과 spring-boot-starter-test를 사용한다.

구성 속성 바인딩을위한 클래스가 있다고 가정 해 보겠습니다.

@ConfigurationProperties(prefix = "dummy")
public class DummyProperties {

    @URL
    private String url;

    // getter, setter ...

}

이제 콩 검증이 정확한지 테스트하고 싶습니다. dummy.value 속성이 설정되지 않았거나 잘못된 URL이 포함되어 있으면 컨텍스트가 시작되지 않아야합니다 (특정 오류 메시지와 함께). 속성에 유효한 URL이 포함되어 있으면 컨텍스트가 시작됩니다. (이 테스트는 @NotNull이 없음을 보여줍니다.)

테스트 클래스는 다음과 같습니다.

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MyApplication.class)
@IntegrationTest({ "dummy.url=123:456" })
public class InvalidUrlTest {
    // my test code
}

제공된 특성이 유효하지 않기 때문에이 테스트는 실패합니다. Spring / JUnit에게 가장 좋은 방법은 무엇입니까? "예,이 오류가 예상됩니다". 일반 JUnit 테스트에서는 ExpectedException을 사용합니다.

해결법

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

    1.통합 테스트가 시작되는 이유는 무엇입니까? 왜 당신은 그걸 위해 봄 부팅 응용 프로그램을 시작하고 있습니까?

    통합 테스트가 시작되는 이유는 무엇입니까? 왜 당신은 그걸 위해 봄 부팅 응용 프로그램을 시작하고 있습니까?

    이것은 나에게 단위 테스트처럼 보인다. 즉, 몇 가지 옵션이 있습니다.

    나는 마지막으로 분명히 갈 것이다. 아마 당신은 통합 테스트를할만한 이유가 있을까요?

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

    2.가장 쉬운 방법은 다음과 같습니다.

    가장 쉬운 방법은 다음과 같습니다.

    public class InvalidUrlTest {
    
        @Rule
        public DisableOnDebug testTimeout = new DisableOnDebug(new Timeout(5, TimeUnit.SECONDS));
        @Rule
        public ExpectedException expected = ExpectedException.none();
    
        @Test
        public void shouldFailOnStartIfUrlInvalid() {
            // configure ExpectedException
            expected.expect(...
    
            MyApplication.main("--dummy.url=123:456");
        }
    
    // other cases
    }
    
  3. from https://stackoverflow.com/questions/31692863/what-is-the-best-way-to-test-that-a-spring-application-context-fails-to-start by cc-by-sa and MIT license