diff --git a/docs/src/docs/asciidoc/getting-started.adoc b/docs/src/docs/asciidoc/getting-started.adoc index 91e25f073..9c5348711 100644 --- a/docs/src/docs/asciidoc/getting-started.adoc +++ b/docs/src/docs/asciidoc/getting-started.adoc @@ -397,6 +397,18 @@ based on your project's build tool: |=== +If you are using JUnit 5.1 or later the default can be overridden by providing +an output directory when registering the `RestDocumentationExtension` instance: + +[source,java,indent=0] +---- +public class JUnit5ExampleTests { + @RegisterExtension + static final RestDocumentationExtension restDocumentation = + new RestDocumentationExtension ("custom"); +} +---- + Next, you must provide a `@BeforeEach` method to configure MockMvc, WebTestClient, or 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 30e37613c..45dbb6c82 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 @@ -33,6 +33,16 @@ public class RestDocumentationExtension implements BeforeEachCallback, AfterEachCallback, ParameterResolver { + private final String outputDirectory; + + public RestDocumentationExtension () { + this(null); + } + + public RestDocumentationExtension (String outputDirectory) { + this.outputDirectory = outputDirectory; + } + @Override public void beforeEach(ExtensionContext context) throws Exception { this.getDelegate(context).beforeTest(context.getRequiredTestClass(), @@ -68,8 +78,15 @@ private boolean isTestMethodContext(ExtensionContext context) { 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 (outputDirectory != null) { + return new ManualRestDocumentation(outputDirectory); + } else { + return new ManualRestDocumentation(); + } + } }