-
@Target({ANNOTATION_TYPE,METHOD}) @Retention(RUNTIME) @Documented @API(status=MAINTAINED, since="5.3") @Testable public @interface TestFactory
@TestFactory
is used to signal that the annotated method is a test factory method.In contrast to
@Test
methods, a test factory is not itself a test case but rather a factory for test cases.@TestFactory
methods must not beprivate
orstatic
and must return aStream
,Collection
,Iterable
,Iterator
, or array ofDynamicNode
instances. Supported subclasses ofDynamicNode
includeDynamicContainer
andDynamicTest
. Dynamic tests will be executed lazily, enabling dynamic and even non-deterministic generation of test cases.Any
Stream
returned by a@TestFactory
will be properly closed by callingstream.close()
, making it safe to use a resource such asFiles.lines()
as the initial source of the stream.@TestFactory
methods may optionally declare parameters to be resolved byParameterResolvers
.Test Execution Order
By default, test methods will be ordered using an algorithm that is deterministic but intentionally nonobvious. This ensures that subsequent runs of a test suite execute test methods in the same order, thereby allowing for repeatable builds. In this context, a test method is any instance method that is directly annotated or meta-annotated with
@Test
,@RepeatedTest
,@ParameterizedTest
,@TestFactory
, or@TestTemplate
.Although true unit tests typically should not rely on the order in which they are executed, there are times when it is necessary to enforce a specific test method execution order — for example, when writing integration tests or functional tests where the sequence of the tests is important, especially in conjunction with
@TestInstance(Lifecycle.PER_CLASS)
.To control the order in which test methods are executed, annotate your test class or test interface with
@TestMethodOrder
and specify the desiredMethodOrderer
implementation.- Since:
- 5.0
- See Also:
Test
,DynamicNode
,DynamicTest
,DynamicContainer