Annotation Interface TempDir


@TempDir can be used to annotate a field in a test class or a parameter in a test class constructor, lifecycle method, or test method of type Path or File that should be resolved into a temporary directory.

Creation

The temporary directory is only created if a field in a test class or a parameter in a test class constructor, lifecycle method, or test method is annotated with @TempDir. An ExtensionConfigurationException or a ParameterResolutionException will be thrown in one of the following cases:

  • If the field type or parameter type is neither Path nor File.
  • If a field is declared as final.
  • If the temporary directory cannot be created.
  • If the field type or parameter type is File and a custom factory is used, which creates a temporary directory that does not belong to the default file system.

Scope

By default, a separate temporary directory is created for every declaration of the @TempDir annotation. For better isolation when using @TestInstance(Lifecycle.PER_METHOD) semantics, you can annotate an instance field or a parameter in the test class constructor with @TempDir so that each test method uses a separate temporary directory. Alternatively, 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.

Clean Up

By default, when the end of the scope of a temporary directory is reached, — when the test method or class has finished execution — JUnit will attempt to clean up the temporary directory by recursively deleting all files and directories in the temporary directory and, finally, the temporary directory itself. Symbolic and other types of links, such as junctions on Windows, are not followed. A warning is logged when deleting a link that targets a location outside the temporary directory. In case deletion of a file or directory fails, an IOException will be thrown that will cause the test or test class to fail.

The cleanup() attribute allows you to configure the CleanupMode. If the cleanup mode is set to NEVER, the temporary directory will not be cleaned up after the test completes. If the cleanup mode is set to ON_SUCCESS, the temporary directory will only be cleaned up if the test completes successfully. By default, the ALWAYS clean up mode will be used, but this can be configured globally by setting the "junit.jupiter.tempdir.cleanup.mode.default" configuration parameter.

Since:
5.4