diff --git a/docs/src/docs/asciidoc/getting-started.adoc b/docs/src/docs/asciidoc/getting-started.adoc index 91e25f07..8ce277be 100644 --- a/docs/src/docs/asciidoc/getting-started.adoc +++ b/docs/src/docs/asciidoc/getting-started.adoc @@ -397,7 +397,19 @@ based on your project's build tool: |=== +If you are using JUnit 5.1, you can override the default by registering the extension +as a field in your test class and providing an output directory when creating it. The +following example shows how to do so: +[source,java,indent=0] +---- +public class JUnit5ExampleTests { + + @RegisterExtension + final RestDocumentationExtension restDocumentation = new RestDocumentationExtension ("custom"); + +} +---- Next, you must provide a `@BeforeEach` method to configure MockMvc, WebTestClient, or REST Assured. The following listings show how to do so: diff --git a/spring-restdocs-core/src/main/java/org/springframework/restdocs/RestDocumentationExtension.java b/spring-restdocs-core/src/main/java/org/springframework/restdocs/RestDocumentationExtension.java index 7c9292db..743ad319 100644 --- a/spring-restdocs-core/src/main/java/org/springframework/restdocs/RestDocumentationExtension.java +++ b/spring-restdocs-core/src/main/java/org/springframework/restdocs/RestDocumentationExtension.java @@ -32,6 +32,26 @@ import org.junit.jupiter.api.extension.ParameterResolver; */ public class RestDocumentationExtension implements BeforeEachCallback, AfterEachCallback, ParameterResolver { + private final String outputDirectory; + + /** + * Creates a new {@code RestDocumentationExtension} that will use the default output + * directory. + */ + public RestDocumentationExtension() { + this(null); + } + + /** + * Creates a new {@code RestDocumentationExtension} that will use the given + * {@code outputDirectory}. + * @param outputDirectory snippet output directory + * @since 2.0.4 + */ + public RestDocumentationExtension(String outputDirectory) { + this.outputDirectory = outputDirectory; + } + @Override public void beforeEach(ExtensionContext context) throws Exception { this.getDelegate(context).beforeTest(context.getRequiredTestClass(), context.getRequiredTestMethod().getName()); @@ -62,7 +82,16 @@ public class RestDocumentationExtension implements BeforeEachCallback, AfterEach private ManualRestDocumentation getDelegate(ExtensionContext context) { Namespace namespace = Namespace.create(getClass(), context.getUniqueId()); return context.getStore(namespace).getOrComputeIfAbsent(ManualRestDocumentation.class, - (key) -> new ManualRestDocumentation(), ManualRestDocumentation.class); + this::createManualRestDocumentation, ManualRestDocumentation.class); + } + + private ManualRestDocumentation createManualRestDocumentation(Class key) { + if (this.outputDirectory != null) { + return new ManualRestDocumentation(this.outputDirectory); + } + else { + return new ManualRestDocumentation(); + } } }