@API(status=EXPERIMENTAL,
since="1.8")
public class UniqueIdTrackingListener
extends java.lang.Object
implements TestExecutionListener
UniqueIdTrackingListener is a TestExecutionListener that tracks
the unique IDs of all
tests that were
executed during the execution of the
TestPlan and generates a file containing the unique IDs once execution
of the TestPlan has finished.
Tests are tracked regardless of their TestExecutionResult or whether
they were skipped, and the unique IDs are written to an output file, one ID
per line, encoding using UTF-8.
The output file can be used to execute the same set of tests again without having to query the user configuration for the test plan and without having to perform test discovery again. This can be useful for test environments such as within a native image — for example, a GraalVM native image — in order to rerun the exact same tests from a standard JVM test run within a native image.
The OUTPUT_DIR is the directory in which this listener generates
the output file. The exact path of the generated file is
OUTPUT_DIR/OUTPUT_FILE_PREFIX-<random number>.txt, where
<random number> is a pseudo-random number. The inclusion of a random
number in the file name ensures that multiple concurrently executing test
plans do not overwrite each other's results.
The value of the OUTPUT_FILE_PREFIX defaults to
DEFAULT_OUTPUT_FILE_PREFIX, but a custom prefix can be set via the
OUTPUT_FILE_PREFIX_PROPERTY_NAME configuration property.
The OUTPUT_DIR can be set to a custom directory via the
OUTPUT_DIR_PROPERTY_NAME configuration property. Otherwise the
following algorithm is used to select a default output directory.
pom.xml, the output directory will be ./target, following the
conventions of Maven..gradle or .gradle.kts, the output directory
will be ./build, following the conventions of Gradle.For example, in a project using Gradle as the build tool, the file generated
by this listener would be ./build/junit-platform-unique-ids-<random number>.txt
by default.
Configuration properties can be set via JVM system properties, via a
junit-platform.properties file in the root of the classpath, or as
JUnit Platform configuration parameters.
| Modifier and Type | Field and Description |
|---|---|
static java.lang.String |
DEFAULT_OUTPUT_FILE_PREFIX
The default prefix for the name of the file generated by the
UniqueIdTrackingListener: "junit-platform-unique-ids" |
private boolean |
enabled |
static java.lang.String |
LISTENER_ENABLED_PROPERTY_NAME
Property name used to enable the
UniqueIdTrackingListener: "junit.platform.listeners.uid.tracking.enabled" |
private Logger |
logger |
static java.lang.String |
OUTPUT_DIR_PROPERTY_NAME
Property name used to set the path to the output directory for the file
generated by the
UniqueIdTrackingListener: "junit.platform.listeners.uid.tracking.output.dir" |
static java.lang.String |
OUTPUT_FILE_PREFIX_PROPERTY_NAME
Property name used to set the prefix for the name of the file generated
by the
UniqueIdTrackingListener: "junit.platform.listeners.uid.tracking.output.file.prefix" |
private java.util.List<java.lang.String> |
uniqueIds |
| Constructor and Description |
|---|
UniqueIdTrackingListener() |
| Modifier and Type | Method and Description |
|---|---|
private java.nio.file.Path |
createOutputFile(ConfigurationParameters configurationParameters) |
void |
executionFinished(TestIdentifier testIdentifier,
TestExecutionResult testExecutionResult)
Called when the execution of a leaf or subtree of the
TestPlan
has finished, regardless of the outcome. |
void |
executionSkipped(TestIdentifier testIdentifier,
java.lang.String reason)
Called when the execution of a leaf or subtree of the
TestPlan
has been skipped. |
void |
testPlanExecutionFinished(TestPlan testPlan)
Called when the execution of the
TestPlan has finished,
after all tests have been executed. |
void |
testPlanExecutionStarted(TestPlan testPlan)
Called when the execution of the
TestPlan has started,
before any test has been executed. |
private void |
trackTestUid(TestIdentifier testIdentifier) |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitdynamicTestRegistered, executionStarted, reportingEntryPublishedpublic static final java.lang.String LISTENER_ENABLED_PROPERTY_NAME
UniqueIdTrackingListener: "junit.platform.listeners.uid.tracking.enabled"
The UniqueIdTrackingListener is registered automatically via
Java's ServiceLoader mechanism but disabled by default.
Set the value of this property to true to enable this listener.
public static final java.lang.String OUTPUT_DIR_PROPERTY_NAME
UniqueIdTrackingListener: "junit.platform.listeners.uid.tracking.output.dir"
For details on the default output directory, see the class-level Javadoc.
public static final java.lang.String OUTPUT_FILE_PREFIX_PROPERTY_NAME
UniqueIdTrackingListener: "junit.platform.listeners.uid.tracking.output.file.prefix"
Defaults to DEFAULT_OUTPUT_FILE_PREFIX.
public static final java.lang.String DEFAULT_OUTPUT_FILE_PREFIX
UniqueIdTrackingListener: "junit-platform-unique-ids"private final Logger logger
private final java.util.List<java.lang.String> uniqueIds
private boolean enabled
public void testPlanExecutionStarted(TestPlan testPlan)
TestExecutionListenerTestPlan has started,
before any test has been executed.
Called from the same thread as TestExecutionListener.testPlanExecutionFinished(TestPlan).
testPlanExecutionStarted in interface TestExecutionListenertestPlan - describes the tree of tests about to be executedpublic void executionSkipped(TestIdentifier testIdentifier, java.lang.String reason)
TestExecutionListenerTestPlan
has been skipped.
The TestIdentifier may represent a test or a container. In
the case of a container, no listener methods will be called for any of
its descendants.
A skipped test or subtree of tests will never be reported as started or finished.
executionSkipped in interface TestExecutionListenertestIdentifier - the identifier of the skipped test or containerreason - a human-readable message describing why the execution
has been skippedpublic void executionFinished(TestIdentifier testIdentifier, TestExecutionResult testExecutionResult)
TestExecutionListenerTestPlan
has finished, regardless of the outcome.
The TestIdentifier may represent a test or a container.
This method will only be called if the test or container has not been skipped.
This method will be called for a container TestIdentifier
after all of its children have been
skipped or have
finished.
The TestExecutionResult describes the result of the execution
for the supplied TestIdentifier. The result does not include or
aggregate the results of its children. For example, a container with a
failing test will be reported as SUCCESSFUL even
if one or more of its children are reported as FAILED.
executionFinished in interface TestExecutionListenertestIdentifier - the identifier of the finished test or containertestExecutionResult - the (unaggregated) result of the execution for
the supplied TestIdentifierTestExecutionResultprivate void trackTestUid(TestIdentifier testIdentifier)
public void testPlanExecutionFinished(TestPlan testPlan)
TestExecutionListenerTestPlan has finished,
after all tests have been executed.
Called from the same thread as TestExecutionListener.testPlanExecutionStarted(TestPlan).
testPlanExecutionFinished in interface TestExecutionListenertestPlan - describes the tree of tests that have been executedprivate java.nio.file.Path createOutputFile(ConfigurationParameters configurationParameters)