/
AfterEachCallback.java
73 lines (67 loc) · 2.78 KB
/
AfterEachCallback.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
* Copyright 2015-2024 the original author or authors.
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v2.0 which
* accompanies this distribution and is available at
*
* https://www.eclipse.org/legal/epl-v20.html
*/
package org.junit.jupiter.api.extension;
import static org.apiguardian.api.API.Status.STABLE;
import org.apiguardian.api.API;
/**
* {@code AfterEachCallback} defines the API for {@link Extension Extensions}
* that wish to provide additional behavior to tests after an individual test
* and any user-defined teardown methods (e.g.,
* {@link org.junit.jupiter.api.AfterEach @AfterEach} methods) for that test
* have been executed.
*
* <p>Concrete implementations often implement {@link BeforeEachCallback} as well.
* If you do not wish to have your callbacks <em>wrapped</em> around user-defined
* setup and teardown methods, implement {@link BeforeTestExecutionCallback} and
* {@link AfterTestExecutionCallback} instead of {@link BeforeEachCallback} and
* {@link AfterEachCallback}.
*
* <h2>Constructor Requirements</h2>
*
* <p>Consult the documentation in {@link Extension} for details on
* constructor requirements.
*
* <h2>Wrapping Behavior</h2>
*
* <p>JUnit Jupiter guarantees <em>wrapping behavior</em> for multiple
* registered extensions that implement lifecycle callbacks such as
* {@link BeforeAllCallback}, {@link AfterAllCallback},
* {@link BeforeEachCallback}, {@link AfterEachCallback},
* {@link BeforeTestExecutionCallback}, and {@link AfterTestExecutionCallback}.
*
* <p>That means that, given two extensions {@code Extension1} and
* {@code Extension2} with {@code Extension1} registered before
* {@code Extension2}, any "before" callbacks implemented by {@code Extension1}
* are guaranteed to execute before any "before" callbacks implemented by
* {@code Extension2}. Similarly, given the two same two extensions registered
* in the same order, any "after" callbacks implemented by {@code Extension1}
* are guaranteed to execute after any "after" callbacks implemented by
* {@code Extension2}. {@code Extension1} is therefore said to <em>wrap</em>
* {@code Extension2}.
*
* @since 5.0
* @see org.junit.jupiter.api.AfterEach
* @see BeforeEachCallback
* @see BeforeTestExecutionCallback
* @see AfterTestExecutionCallback
* @see BeforeAllCallback
* @see AfterAllCallback
*/
@FunctionalInterface
@API(status = STABLE, since = "5.0")
public interface AfterEachCallback extends Extension {
/**
* Callback that is invoked <em>after</em> an individual test and any
* user-defined teardown methods for that test have been executed.
*
* @param context the current extension context; never {@code null}
*/
void afterEach(ExtensionContext context) throws Exception;
}