@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 be private
or static
and must return a Stream
, Collection
, Iterable
,
Iterator
, or array of DynamicNode
instances. Supported
subclasses of DynamicNode
include DynamicContainer
and
DynamicTest
. 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 calling stream.close()
, making it safe to use a resource
such as Files.lines()
as the initial source of the stream.
@TestFactory
methods may optionally declare parameters to be
resolved by ParameterResolvers
.
Inheritance
@TestFactory
methods are inherited from superclasses as long as
they are not overridden according to the visibility rules of the Java
language. Similarly, @TestFactory
methods declared as interface
default methods are inherited as long as they are not overridden.
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 desired MethodOrderer
implementation.
- Since:
- 5.0
- See Also: