diff --git a/docs/src/docs/asciidoc/getting-started.adoc b/docs/src/docs/asciidoc/getting-started.adoc index 91e25f07..9c534871 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 7c9292db..7b9cf57a 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,16 @@ import org.junit.jupiter.api.extension.ParameterResolver; */ 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(), context.getRequiredTestMethod().getName()); @@ -62,7 +72,14 @@ 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 (outputDirectory != null) { + return new ManualRestDocumentation(outputDirectory); + } else { + return new ManualRestDocumentation(); + } + } }