Annotation Interface AutoClose


@AutoClose is used to indicate that an annotated field will be automatically closed after test execution.

@AutoClose fields may be either static or non-static. If the value of an @AutoClose field is null when it is evaluated the field will be ignored, but a warning message will be logged to inform you.

By default, @AutoClose expects the value of the annotated field to implement a close() method that will be invoked to close the resource. However, developers can customize the name of the close method via the value() attribute. For example, @AutoClose("shutdown") instructs JUnit to look for a shutdown() method to close the resource.

@AutoClose may be used as a meta-annotation in order to create a custom composed annotation that inherits the semantics of @AutoClose.

Inheritance Link icon

@AutoClose fields are inherited from superclasses. Furthermore, @AutoClose fields from subclasses will be closed before @AutoClose fields in superclasses.

Evaluation Order Link icon

When multiple @AutoClose fields exist within a given test class, the order in which the resources are closed depends on an algorithm that is deterministic but intentionally nonobvious. This ensures that subsequent runs of a test suite close resources in the same order, thereby allowing for repeatable builds.

Scope and Lifecycle Link icon

The extension that closes @AutoClose fields implements the AfterAllCallback and TestInstancePreDestroyCallback extension APIs. Consequently, a static @AutoClose field will be closed after all tests in the current test class have completed, effectively after @AfterAll methods have executed for the test class. A non-static @AutoClose field will be closed before the current test class instance is destroyed. Specifically, if the test class is configured with @TestInstance(Lifecycle.PER_METHOD) semantics, a non-static @AutoClose field will be closed after the execution of each test method, test factory method, or test template method. However, if the test class is configured with @TestInstance(Lifecycle.PER_CLASS) semantics, a non-static @AutoClose field will not be closed until the current test class instance is no longer needed, which means after @AfterAll methods and after all static @AutoClose fields have been closed.

Since:
5.11
  • Optional Element Summary Link icon

    Optional Elements
    Modifier and Type
    Optional Element
    Description
    Specify the name of the method to invoke to close the resource.
  • Element Details

    • value Link icon

      String value
      Specify the name of the method to invoke to close the resource.

      The default value is "close" which works with any type that implements AutoCloseable or has a close() method.

      Returns:
      the name of the method to invoke to close the resource
      Default:
      "close"