我有一个基于JUnit 4的测试系统,它根据一些自定义注释强制执行测试策略。特别是,我可以注释方法并让测试系统从这些方法中强制执行超时和资源访问。
例如,使用@Medium注释的测试必须在不到六十秒的时间内完成,并且无法访问网络。
缺少自定义注释的测试被归类为" small"测试,必须在不到10秒的时间内完成,并且无法访问网络或文件系统(例如,确保单元测试实际上是单元测试)。
测试系统还确保在尝试任何介质测试之前通过所有小测试。在尝试任何大型测试等之前,所有中型测试都必须通过。
在JUnit 4之上实现它非常简单,只需要自定义系统的几个关键部分。
我正在探索将其迁移到JUnit 5,我想知道是否有一个好方法可以做到这一点。新的发现和过滤机制将真正简化测试排序,但随着跑步者的删除,我不确定如何执行测试大小调整策略。
注意:让测试本身强制执行该策略不会起作用,因为我需要确保在不了解测试系统的情况下编写的测试执行了小的测试策略。
我相信我可以创建一个自定义测试引擎,但我认为这可能有点矫枉过正。
答案 0 :(得分:2)
是的,自定义TestEngine
对于此目的来说是过度的。
至于访问标签,通过您实施的任何扩展程序都很容易。扩展回调方法接收对ExtensionContext
(或其子类)的访问,该org.junit.jupiter.api.extension.ExtensionContext.getTags()
提供对标记的访问。请参阅cpp.o
。
我不确定如何执行测试大小调整政策。
这是目前的一部分(从JUnit Jupiter 5.0 M3开始)是不可能的,但我们计划在5.0 GA之前做出这样的事情。有关详细信息,请参阅issue 157。