Class DynamicTest

java.lang.Object
org.junit.jupiter.api.DynamicNode
org.junit.jupiter.api.DynamicTest

@API(status=MAINTAINED, since="5.3") public class DynamicTest extends DynamicNode
A DynamicTest is a test case generated at runtime.

It is composed of a display name and an Executable.

Instances of DynamicTest must be generated by factory methods annotated with @TestFactory.

Note that dynamic tests are quite different from standard @Test cases since callbacks such as @BeforeEach and @AfterEach methods are not executed for dynamic tests.

Since:
5.0
See Also:
dynamicTest(String, Executable), stream(Iterator, Function, ThrowingConsumer), Test, TestFactory, DynamicContainer, Executable
  • Method Details

    • dynamicTest

      public static DynamicTest dynamicTest(String displayName, Executable executable)
      Factory for creating a new DynamicTest for the supplied display name and executable code block.
      Parameters:
      displayName - the display name for the dynamic test; never null or blank
      executable - the executable code block for the dynamic test; never null
      See Also:
      stream(Iterator, Function, ThrowingConsumer)
    • dynamicTest

      public static DynamicTest dynamicTest(String displayName, URI testSourceUri, Executable executable)
      Factory for creating a new DynamicTest for the supplied display name, custom test source URI, and executable code block.
      Parameters:
      displayName - the display name for the dynamic test; never null or blank
      testSourceUri - a custom test source URI for the dynamic test; may be null if the framework should generate the test source based on the @TestFactory method
      executable - the executable code block for the dynamic test; never null
      Since:
      5.3
      See Also:
      stream(Iterator, Function, ThrowingConsumer)
    • stream

      public static <T> Stream<DynamicTest> stream(Iterator<T> inputGenerator, Function<? super T,​String> displayNameGenerator, ThrowingConsumer<? super T> testExecutor)
      Generate a stream of dynamic tests based on the given generator and test executor.

      Use this method when the set of dynamic tests is nondeterministic in nature or when the input comes from an existing Iterator. See stream(Stream, Function, ThrowingConsumer) as an alternative.

      The given inputGenerator is responsible for generating input values. A DynamicTest will be added to the resulting stream for each dynamically generated input value, using the given displayNameGenerator and testExecutor.

      Type Parameters:
      T - the type of input generated by the inputGenerator and used by the displayNameGenerator and testExecutor
      Parameters:
      inputGenerator - an Iterator that serves as a dynamic input generator; never null
      displayNameGenerator - a function that generates a display name based on an input value; never null
      testExecutor - a consumer that executes a test based on an input value; never null
      Returns:
      a stream of dynamic tests based on the given generator and executor; never null
      See Also:
      dynamicTest(String, Executable), stream(Stream, Function, ThrowingConsumer)
    • stream

      @API(status=MAINTAINED, since="5.7") public static <T> Stream<DynamicTest> stream(Stream<T> inputStream, Function<? super T,​String> displayNameGenerator, ThrowingConsumer<? super T> testExecutor)
      Generate a stream of dynamic tests based on the given input stream and test executor.

      Use this method when the set of dynamic tests is nondeterministic in nature or when the input comes from an existing Stream. See stream(Iterator, Function, ThrowingConsumer) as an alternative.

      The given inputStream is responsible for supplying input values. A DynamicTest will be added to the resulting stream for each dynamically supplied input value, using the given displayNameGenerator and testExecutor.

      Type Parameters:
      T - the type of input supplied by the inputStream and used by the displayNameGenerator and testExecutor
      Parameters:
      inputStream - a Stream that supplies dynamic input values; never null
      displayNameGenerator - a function that generates a display name based on an input value; never null
      testExecutor - a consumer that executes a test based on an input value; never null
      Returns:
      a stream of dynamic tests based on the given generator and executor; never null
      Since:
      5.7
      See Also:
      dynamicTest(String, Executable), stream(Iterator, Function, ThrowingConsumer)
    • stream

      @API(status=MAINTAINED, since="5.8") public static <T> Stream<DynamicTest> stream(Iterator<? extends Named<T>> inputGenerator, ThrowingConsumer<? super T> testExecutor)
      Generate a stream of dynamic tests based on the given generator and test executor.

      Use this method when the set of dynamic tests is nondeterministic in nature or when the input comes from an existing Iterator. See stream(Stream, ThrowingConsumer) as an alternative.

      The given inputGenerator is responsible for generating input values and display names. A DynamicTest will be added to the resulting stream for each dynamically generated input value, using the given testExecutor.

      Type Parameters:
      T - the type of input generated by the inputGenerator and used by the testExecutor
      Parameters:
      inputGenerator - an Iterator with Named values that serves as a dynamic input generator; never null
      testExecutor - a consumer that executes a test based on an input value; never null
      Returns:
      a stream of dynamic tests based on the given generator and executor; never null
      Since:
      5.8
      See Also:
      dynamicTest(String, Executable), stream(Stream, ThrowingConsumer), Named
    • stream

      @API(status=MAINTAINED, since="5.8") public static <T> Stream<DynamicTest> stream(Stream<? extends Named<T>> inputStream, ThrowingConsumer<? super T> testExecutor)
      Generate a stream of dynamic tests based on the given input stream and test executor.

      Use this method when the set of dynamic tests is nondeterministic in nature or when the input comes from an existing Stream. See stream(Iterator, ThrowingConsumer) as an alternative.

      The given inputStream is responsible for supplying input values and display names. A DynamicTest will be added to the resulting stream for each dynamically supplied input value, using the given testExecutor.

      Type Parameters:
      T - the type of input supplied by the inputStream and used by the displayNameGenerator and testExecutor
      Parameters:
      inputStream - a Stream that supplies dynamic Named input values; never null
      testExecutor - a consumer that executes a test based on an input value; never null
      Returns:
      a stream of dynamic tests based on the given generator and executor; never null
      Since:
      5.8
      See Also:
      dynamicTest(String, Executable), stream(Iterator, ThrowingConsumer), Named
    • getExecutable

      public Executable getExecutable()
      Get the executable code block associated with this DynamicTest.