Java 对于一个测试方法,在方法之后是否有JUNIT注释可以跳过?
在一个用Java 对于一个测试方法,在方法之后是否有JUNIT注释可以跳过?,java,junit,annotations,Java,Junit,Annotations,在一个用@test注释的测试类中,我有5个测试方法。 我也有@Before和@After方法。有没有办法只在第一个测试方法中使用@After跳过该方法,并在其余测试方法中运行它 如果您希望它有点通用性,请在@Before中将变量“afterToBeLaunched”设置为false。在每个需要@After的测试中,将其设置为true。当然,在@After开头检查它,如果它为false,返回该方法 如果在4.7版本之后使用JUnit,请使用@Rules。()您可以使用Rule而不是@After和u
@test
注释的测试类中,我有5个测试方法。
我也有@Before
和@After
方法。有没有办法只在第一个测试方法中使用@After
跳过该方法,并在其余测试方法中运行它
返回该方法
这个问题不久前就被问到了,但是对于JUnit的版本5(JUnitJupiter),我们可以使用
@Tag
和TestInfo
来完成同样的事情。其思想是在每次执行后,向测试中添加一个不需要执行@的标记,并使用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.
}
}
上面的输出如下所示
之前
第一次测试
之前
第二次测试
之后
之前
第三次测试
之后
通过跳过@After
方法,您到底想要实现什么?据我所知,您不能跳过标记为@After的方法的执行。为了测试的可读性,在进行测试之前,您可能应该三思而后行。但是,如果您真的想这样做,您可以在测试类中添加一个布尔runAfter
字段,并在第一个方法中将其设置为false
。此外,在@After
方法中添加if(runAfter){/*After-code*/}
。非常感谢。这真的很有帮助。还需要知道,当我运行两个测试时,与其他测试方法相比,第一个测试总是需要更多的时间来执行。有什么原因吗?像Mockito这样的模拟框架在第一次用于执行时需要几百毫秒才能启动。