[SPRING] JUNIT 5 : 사용자 정의 TestTemplateInvocationContextProvider에 스프링 구성 요소 주입
SPRINGJUNIT 5 : 사용자 정의 TestTemplateInvocationContextProvider에 스프링 구성 요소 주입
JUnit Jupiter (JUnit 5)에서 Spring 구성 요소를 TestTemplateInvocationContextProvider에 삽입 할 수있는 방법이 있습니까?
해결법
-
==============================
1.예. TestTemplateInvocationContextProvider를 테스트 클래스 용으로로드 된 Spring ApplicationContext에 Bean으로 등록하면 공급자로 @Autowired를 필드에 넣고 @RegisterExtension을 사용하여 JUnit Jupiter 확장으로 등록 할 수 있습니다. JUnit Jupiter가 사용하기에 앞서 프로 바이더를 등록하기 위해서는 클래스 별 테스트 인스턴스 라이프 사이클 모드를 사용해야 할 것입니다.
예. TestTemplateInvocationContextProvider를 테스트 클래스 용으로로드 된 Spring ApplicationContext에 Bean으로 등록하면 공급자로 @Autowired를 필드에 넣고 @RegisterExtension을 사용하여 JUnit Jupiter 확장으로 등록 할 수 있습니다. JUnit Jupiter가 사용하기에 앞서 프로 바이더를 등록하기 위해서는 클래스 별 테스트 인스턴스 라이프 사이클 모드를 사용해야 할 것입니다.
다음은 JUnit 5 User Guide의 TestTemplateDemo 수정 된 버전입니다.
테스트는 "있는 그대로"전달되지만 baz bean에 대한 @Bean 선언에서 // 제거하여 테스트 실패를 확인할 수 있습니다.
@SpringJUnitConfig @TestInstance(Lifecycle.PER_CLASS) class TestTemplateDemo { @Autowired @RegisterExtension TestTemplateInvocationContextProvider testTemplateInvocationContextProvider; @TestTemplate void testTemplate(String parameter) { assertTrue("foo".equals(parameter) || "bar".equals(parameter)); } @Configuration static class Config { @Bean String foo() { return "foo"; } @Bean String bar() { return "bar"; } // @Bean String baz() { return "baz"; } @Bean TestTemplateInvocationContextProvider myTestTemplateInvocationContextProvider( List<String> parameters) { return new MyTestTemplateInvocationContextProvider(parameters); } } public static class MyTestTemplateInvocationContextProvider implements TestTemplateInvocationContextProvider { private final List<String> parameters; public MyTestTemplateInvocationContextProvider(List<String> parameters) { this.parameters = parameters; } @Override public boolean supportsTestTemplate(ExtensionContext context) { return true; } @Override public Stream<TestTemplateInvocationContext> provideTestTemplateInvocationContexts( ExtensionContext context) { return this.parameters.stream().map(p -> invocationContext(p)); } private TestTemplateInvocationContext invocationContext(String parameter) { return new TestTemplateInvocationContext() { @Override public String getDisplayName(int invocationIndex) { return parameter; } @Override public List<Extension> getAdditionalExtensions() { return Collections.singletonList(new ParameterResolver() { @Override public boolean supportsParameter( ParameterContext parameterContext, ExtensionContext extensionContext) { return parameterContext.getParameter().getType().equals( String.class); } @Override public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) { return parameter; } }); } }; } } }
from https://stackoverflow.com/questions/50237046/junit-5-inject-spring-components-to-custom-testtemplateinvocationcontextprovide by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Grails와 CAS 기본 설정 (0) | 2019.02.28 |
---|---|
[SPRING] 오류 발생 : PKIX 경로 구축 실패 : 요청한 대상에 대한 유효한 인증 경로를 찾을 수 없음 (0) | 2019.02.28 |
[SPRING] Junit 테스트에서 종속성을 주입 할 수 없음 (0) | 2019.02.28 |
[SPRING] soap spring ws - <faultcode>를 사용자 정의하는 방법 soapenv : 서버 </ faultcode>에서 <faultcode> 일부 오류 code.eg (숫자) </ faultcode> (0) | 2019.02.28 |
[SPRING] 봄 데이터를 사용하여 널 포인터 예외 예외 Mongo 집계 가져 오기 (동적 필드) (0) | 2019.02.28 |