-
@Target({ANNOTATION_TYPE,METHOD}) @Retention(RUNTIME) @Documented @API(status=STABLE, since="5.0") public @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 avoid
return type, must not beprivate
, and must not bestatic
. They may optionally declare parameters to be resolved byParameterResolvers
.Inheritance and Execution Order
@BeforeEach
methods are inherited from superclasses as long as they are not overridden. 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
methodscreateA()
andcreateB()
as well as two@AfterEach
methodsdestroyA()
anddestroyB()
, the order in which the@BeforeEach
methods are executed (e.g.createA()
beforecreateB()
) does not imply any order for the seemingly corresponding@AfterEach
methods. In other words,destroyA()
might be called before or afterdestroyB()
. 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:
AfterEach
,BeforeAll
,AfterAll
,Test
,RepeatedTest
,TestFactory
,TestTemplate