@TempDir
can be used to annotate a field in a test class or a
parameter in a lifecycle method or test method of type Path
or
File
that should be resolved into a temporary directory.
Please note that @TempDir
is not supported on constructor
parameters. Please use field injection instead by annotating an instance
field with @TempDir
.
Creation
The temporary directory is only created if a field in a test class or a
parameter in a lifecycle method or test method is annotated with
@TempDir
. If the field type or parameter type is neither Path
nor File
or if the temporary directory cannot be created, an
ExtensionConfigurationException
or a
ParameterResolutionException
will be thrown as appropriate. In
addition, a ParameterResolutionException
will be thrown for a
constructor parameter annotated with @TempDir
.
Scope
By default, a separate temporary directory is created for every
declaration of the @TempDir
annotation. If you want to share a
temporary directory across all tests in a test class, you should declare the
annotation on a static
field or on a parameter of a
@BeforeAll
method.
Old behavior
You can revert to the old behavior of using a single temporary directory
by setting the junit.jupiter.tempdir.scope
configuration parameter to
per_context
. In that case, the scope of the temporary directory
depends on where the first @TempDir
annotation is encountered when
executing a test class. The temporary directory will be shared by all tests
in a class when the annotation is present on a static
field or on a
parameter of a @BeforeAll
method.
Otherwise — for example, when @TempDir
is only used on instance
fields or on parameters in test,
@BeforeEach
, or
@AfterEach
methods — each test
will use its own temporary directory.
Deletion
When the end of the scope of a temporary directory is reached, i.e. when
the test method or class has finished execution, JUnit will attempt to
recursively delete all files and directories in the temporary directory
and, finally, the temporary directory itself. In case deletion of a file or
directory fails, an IOException
will be thrown that will cause the
test or test class to fail.
- Since:
- 5.4