我正在为我的Java项目编写JUnit 5测试 .
我有一些测试方法,需要耗费时间进行清理(每次测试后) . 理想情况下,我想用一些注释标记它们并仅为它们运行清理方法 .
这是我试过的:
class MyTest {
@AfterEach
@Tag("needs-cleanup")
void cleanup() {
//do some complex stuff
}
@Test
void test1() {
//do test1
}
@Test
@Tag("needs-cleanup")
void test2() {
//do test2
}
}
我想 cleanup
方法只能在 test2
之后运行 . 但实际上它在两次测试后都会运行 .
是否可以通过JUnit 5注释的某种组合来实现它?我不想将我的测试类分成几个类或直接从测试方法调用 cleanup
.
3 回答
来自文档:
关于上面的描述,您可以使用TestInfo类,它为您提供了应该运行cleanUp的类的信息,然后您需要检查条件并通过检查其标记来允许您想要的那些:
您可以将test注入测试并检查测试注释的标签:
您可以创建自己的AfterEachCallback扩展并将其应用于所需的测试方法 . 这个扩展将在每次测试后执行's applied to. Then, using custom annotations, you can link specific cleanup methods with specific tests. Here'是扩展的一个例子:
然后你的测试类看起来像:
运行
Tests
我得到以下输出:此扩展名将应用于使用
CleanupExtension.Cleanup
或ExtendWith(CleanupExtension.class)
注释的任何测试方法 . 前一个注释的目的是将配置与也应用扩展的注释相结合 . 然后,在每个测试方法之后,扩展将调用使用CleanupExtension.CleanMethod
注释的类层次结构中的任何方法 .Cleanup
和CleanMethod
都具有String
属性 . 此属性是"name",只有CleanMethod
与Cleanup
测试匹配"name"将被执行 . 这允许您将特定的测试方法链接到特定的清理方法 .有关JUnit Jupiter扩展的更多信息,请参阅§5 of the User Guide . 另外,对于
CleanupExtension.Cleanup
我正在使用§3.1.1中描述的元注释/组合注释功能 .请注意,这比@Roman Konoval给出的the answer更复杂,但如果你不得不多次这样做,它可能会更加用户友好 . 但是,如果您只需要为一个或两个测试类做这个,我建议使用Roman的答案 .