Skip to content

Commit c4faa6c

Browse files
authored
Introduce support for parameterized classes (#4342)
This commit introduces @ParameterizedClass which builds on @ContainerTemplate and allows declaring a top-level or @nested test class as a parameterized container to be invoked multiple times with different arguments. The same @...Source annotations as for @ParameterizedTest may be used to provide arguments via constructor or field injection. Resolves #878.
1 parent 8cab7b8 commit c4faa6c

File tree

106 files changed

+4964
-1074
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

106 files changed

+4964
-1074
lines changed

documentation/src/docs/asciidoc/link-attributes.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,9 @@ endif::[]
185185
:params-provider-package: {javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/provider/package-summary.html[org.junit.jupiter.params.provider]
186186
:AnnotationBasedArgumentConverter: {javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/converter/AnnotationBasedArgumentConverter.html[AnnotationBasedArgumentConverter]
187187
:AnnotationBasedArgumentsProvider: {javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/provider/AnnotationBasedArgumentsProvider.html[AnnotationBasedArgumentsProvider]
188+
:AggregateWith: {javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/aggregator/AggregateWith.html[@AggregateWith]
189+
:Arguments: {javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/provider/Arguments.html[Arguments]
190+
:ArgumentsProvider: {javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/provider/ArgumentsProvider.html[ArgumentsProvider]
188191
:ArgumentsAccessor: {javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/aggregator/ArgumentsAccessor.html[ArgumentsAccessor]
189192
:ArgumentsAggregator: {javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/aggregator/ArgumentsAggregator.html[ArgumentsAggregator]
190193
:CsvArgumentsProvider: {junit5-repo}/blob/main/junit-jupiter-params/src/main/java/org/junit/jupiter/params/provider/CsvArgumentsProvider.java[CsvArgumentsProvider]
@@ -193,6 +196,8 @@ endif::[]
193196
:MethodSource: {javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/provider/MethodSource.html[@MethodSource]
194197
:NullAndEmptySource: {javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/provider/NullAndEmptySource.html[@NullAndEmptySource]
195198
:NullSource: {javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/provider/NullSource.html[@NullSource]
199+
:Parameter: {javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/Parameter.html[@Parameter]
200+
:ParameterizedClass: {javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/ParameterizedClass.html[@ParameterizedClass]
196201
:ParameterizedTest: {javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/ParameterizedTest.html[@ParameterizedTest]
197202
:ValueArgumentsProvider: {junit5-repo}/blob/main/junit-jupiter-params/src/main/java/org/junit/jupiter/params/provider/ValueArgumentsProvider.java[ValueArgumentsProvider]
198203
// Jupiter Engine

documentation/src/docs/asciidoc/release-notes/release-notes-5.13.0-M1.adoc

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,14 @@ repository on GitHub.
5555
allow declaring a top-level or `@Nested` test class as a template to be invoked multiple
5656
times. This may be used, for example, to inject different parameters to be used by all
5757
tests in the container template class or to set up each invocation of the container
58-
template differently.
58+
template differently. Please refer to the
59+
<<../user-guide/index.adoc#writing-tests-container-templates, User Guide>> for details.
60+
* Introduce `@ParameterizedClass` concept that builds on `@ContainerTemplate` and allows
61+
declaring a top-level or `@Nested` test class as a parameterized test class to be
62+
invoked multiple times with different arguments. The same `@...Source` annotations as
63+
for `@ParameterizedTest` may be used to provide arguments via constructor or field
64+
injection. Please refer to the
65+
<<../user-guide/index.adoc#writing-tests-parameterized-tests, User Guide>> for details.
5966
* New `TestTemplateInvocationContext.prepareInvocation(ExtensionContext)` callback method
6067
allows preparing the `ExtensionContext` before the test template method is invoked. This
6168
may be used, for example, to store entries in its `Store` to benefit from its cleanup

documentation/src/docs/asciidoc/user-guide/appendix.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ Please refer to the corresponding sections for <<running-tests-build-maven-bom,
105105
`junit-jupiter-engine`::
106106
JUnit Jupiter test engine implementation; only required at runtime.
107107
`junit-jupiter-params`::
108-
Support for <<writing-tests-parameterized-tests,parameterized tests>> in JUnit Jupiter.
108+
Support for <<writing-tests-parameterized-tests>> in JUnit Jupiter.
109109
`junit-jupiter-migrationsupport`::
110110
Support for migrating from JUnit 4 to JUnit Jupiter; only required for support for
111111
JUnit 4's `@Ignore` annotation and for running selected JUnit 4 rules.

documentation/src/docs/asciidoc/user-guide/extensions.adoc

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -804,6 +804,9 @@ implementing different kinds of tests that rely on repetitive invocation of _all
804804
methods in a test class albeit in different contexts — for example, with different
805805
parameters, by preparing the test class instance differently, or multiple times without
806806
modifying the context.
807+
Please refer to the implementations of
808+
<<writing-tests-parameterized-tests, Parameterized Classes>> which uses this extension
809+
point to provide its functionality.
807810

808811
[[extensions-test-templates]]
809812
=== Providing Invocation Contexts for Test Templates
@@ -839,8 +842,8 @@ implementing different kinds of tests that rely on repetitive invocation of a te
839842
method albeit in different contexts — for example, with different parameters, by preparing
840843
the test class instance differently, or multiple times without modifying the context.
841844
Please refer to the implementations of <<writing-tests-repeated-tests>> or
842-
<<writing-tests-parameterized-tests>> which use this extension point to provide their
843-
functionality.
845+
<<writing-tests-parameterized-tests, Parameterized Tests>> which use this extension point
846+
to provide their functionality.
844847

845848
[[extensions-keeping-state]]
846849
=== Keeping State in Extensions

0 commit comments

Comments
 (0)