2016-08-31 1 views
0

SpringテストをJUnit 5に移行しても正常に動作します。しかし、私はどのように移行するのか分からない@Rule public JUnitRestDocumentation restDocumentation = ...。 ヒントはありがたいです。Spring RESTドキュメント:JUnit 5へのルールの移行方法

+1

非常に良いブログエントリがあります。http://www.codeaffine.com/2016/04/06/replace-rules-in-junit5/これはドキュメントを要求しています:) – cheffe

+1

JUnit Jupiter(JUnit 5)に正常に移行したことは素晴らしいことです! Spring REST DocsでのJUnit 4サポートの置き換えに関して、私はここでそれに関する問題を作成しました:https://github.com/spring-projects/spring-restdocs/issues/296 –

答えて

1

春RestDocs 2新しいクラスが導入されていますJUnitの5用RestDocumentationExtensionあなたは完全な例がhttps://github.com/spring-projects/spring-restdocs/blob/v2.0.0.RELEASE/samples/junit5/src/test/java/com/example/junit5/SampleJUnit5ApplicationTests.java

  • に拡張可能ですRule

    @ExtendWith(RestDocumentationExtension.class) public class JUnit5ExampleTests {

    Spring RestDocs 2にはSpring 5とJDK 8が必要です

  • 2

    問題が正式に解決されるまで、私はJUnit 5エクステンション(下記)で動作させることができました。その拡張子を使用して

    は、私はthusly私のテストクラスを変更:ここで

    @ExtendWith(RestDocsExtension.class) 
    

    @BeforeEach 
    void setUp(WebApplicationContext wac, ManualRestDocumentation restDocumentation) throws Exception { 
    

    は拡張機能です。

    import org.junit.jupiter.api.extension.AfterEachCallback; 
    import org.junit.jupiter.api.extension.BeforeAllCallback; 
    import org.junit.jupiter.api.extension.BeforeEachCallback; 
    import org.junit.jupiter.api.extension.ContainerExtensionContext; 
    import org.junit.jupiter.api.extension.ExtensionContext; 
    import org.junit.jupiter.api.extension.ParameterContext; 
    import org.junit.jupiter.api.extension.ParameterResolutionException; 
    import org.junit.jupiter.api.extension.ParameterResolver; 
    import org.junit.jupiter.api.extension.TestExtensionContext; 
    import org.springframework.restdocs.ManualRestDocumentation; 
    
    import java.lang.reflect.Method; 
    import java.util.Optional; 
    
    public class RestDocsExtension implements BeforeAllCallback, BeforeEachCallback, AfterEachCallback, ParameterResolver { 
    
        private static final String REST_DOC_STORE_KEY = "restDocumentation"; 
    
        private ManualRestDocumentation restDocumentation; 
    
        @Override 
        public void beforeAll(ContainerExtensionContext context) throws Exception { 
         if (restDocumentation == null) { 
          restDocumentation = new ManualRestDocumentation("target/generated-snippets"); 
          getStore(context).put(REST_DOC_STORE_KEY, restDocumentation); 
         } 
        } 
    
        @Override 
        public void beforeEach(TestExtensionContext context) throws Exception { 
         Optional<Class<?>> testClass = context.getTestClass(); 
         Optional<Method> methodNameOpt = context.getTestMethod(); 
         if (testClass.isPresent() && methodNameOpt.isPresent()) { 
          getDoc(context).beforeTest(testClass.get().getClass(), methodNameOpt.get().getName()); 
         } else { 
          throw new Exception("TestExtensionContext with no class or method. wat"); 
         } 
        } 
    
        @Override 
        public void afterEach(TestExtensionContext context) throws Exception { 
         getDoc(context).afterTest(); 
        } 
    
        @Override 
        public boolean supports(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { 
         return parameterContext.getParameter().getType() == ManualRestDocumentation.class; 
        } 
    
        @Override 
        public Object resolve(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { 
         return getDoc(extensionContext); 
        } 
    
        private ManualRestDocumentation getDoc(ExtensionContext context) { 
         return (ManualRestDocumentation) getStore(context).get(REST_DOC_STORE_KEY); 
        } 
    
        private ExtensionContext.Store getStore(ExtensionContext context) { 
         return context.getStore(ExtensionContext.Namespace.DEFAULT); 
        } 
    } 
    
    関連する問題