Annotation Interface BeforeEach


@BeforeEach is used to signal that the annotated method should be executed before each @Test, @RepeatedTest, @ParameterizedTest, @TestFactory, and @TestTemplate method in the current test class.

Method Signatures

@BeforeEach methods must have a void return type and must not be static. Using private visibility is strongly discouraged and will be disallowed in a future release. They may optionally declare parameters to be resolved by ParameterResolvers.

Inheritance and Execution Order

@BeforeEach methods are inherited from superclasses as long as they are not overridden or superseded (i.e., replaced based on signature only, irrespective of Java's visibility rules). Furthermore, @BeforeEach methods from superclasses will be executed before @BeforeEach methods in subclasses.

Similarly, @BeforeEach methods declared as interface default methods are inherited as long as they are not overridden, and @BeforeEach default methods will be executed before @BeforeEach methods in the class that implements the interface.

JUnit Jupiter does not guarantee the execution order of multiple @BeforeEach methods that are declared within a single test class or test interface. While it may at times appear that these methods are invoked in alphabetical order, they are in fact sorted using an algorithm that is deterministic but intentionally non-obvious.

In addition, @BeforeEach methods are in no way linked to @AfterEach methods. Consequently, there are no guarantees with regard to their wrapping behavior. For example, given two @BeforeEach methods createA() and createB() as well as two @AfterEach methods destroyA() and destroyB(), the order in which the @BeforeEach methods are executed (e.g. createA() before createB()) does not imply any order for the seemingly corresponding @AfterEach methods. In other words, destroyA() might be called before or after destroyB(). The JUnit Team therefore recommends that developers declare at most one @BeforeEach method and at most one @AfterEach method per test class or test interface unless there are no dependencies between the @BeforeEach methods or between the @AfterEach methods.

Composition

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

Since:
5.0
See Also: