我在一个测试类中有 5 个测试方法,用@Test
. 我也有@Before
方法@After
。有没有办法@After
只为第一个 Test 方法跳过该方法并在其余部分运行它?
问问题
4925 次
2 回答
2
- 如果您希望它有点通用,请在 @Before 中将变量“afterToBeLaunched”设置为 false。在每个需要@After 的测试中,将其设置为 true。当然在@After的开头检查它,如果它是假
return
的,方法。 - 如果您在 4.7 版本之后使用 JUnit,请使用 @Rules。(在 JUnit 中的每个 '@Test' 之后和每个 '@After' 之前应用 '@Rule')您可以使用 Rule 而不是 @After 并使用TestName,您可以在那里读取测试的名称并根据目前结束测试。
于 2012-12-11T10:09:45.643 回答
2
不久前有人问过这个问题,但是在 JUnit 的第 5 版(JUnit Jupiter)中,我们可以使用@Tag
andTestInfo
来完成同样的事情。这个想法是向不需要@AfterEach
执行的测试添加一个标签,并用于TestInfo
确定当前测试是否包含该标签。在代码中,这可能看起来像
class TestSuite {
@BeforeEach
void beforeEach() {
System.out.println("BeforeEach");
// Set-up logic.
}
@AfterEach
void afterEach(TestInfo testInfo) {
if(testInfo.getTags().contains("SkipCleanup")) {
return;
}
System.out.println("AfterEach");
// Perform cleanup logic.
}
@Test
@Tag("SkipCleanup")
void myTestWithoutCleanup() {
System.out.println("First Test");
// Test logic.
}
@Test
void myTestWithCleanup() {
System.out.println("Second Test");
// Test logic.
}
@Test
void myOtherTestWithCleanup() {
System.out.println("Third Test");
// Test logic.
}
}
上面的输出看起来像
在每个之前
第一次测试
在每个之前
第二次测试
每次之后
在每个之前
第三次测试
每次之后
于 2018-04-06T13:46:47.370 回答