我有一个专门在 Eclipse 中开发的 Java 代码库。有一组 JUnit4 测试可以根据预期运行的时间分为两个互斥的子集:
- 当开发人员右键单击测试类(或包含项目)并选择 Run As > JUnit Test 时,应该运行“标准”测试。这里没有什么不寻常的——这正是 JUnit 在 Eclipse 中的工作方式。
- “运行时”测试仅应在应用程序以特定状态启动时在应用程序内以编程方式调用时运行。
这两种类型的测试可能在同一个 Java 包中彼此相邻。(理想情况下,我们可以将它们混合在同一个类中,尽管这不是硬性要求。)
我的第一个解决方案是使用新注释来注释“运行时”测试类
@TestOnLaunch
。应用程序能够找到这些类,并@Test
使用
JUnitCore.run(Class<?>...)
. 但是,这些测试会泄漏到上面的“标准”场景中,因为 Eclipse 测试运行器将运行任何带有 注释的方法@Test
,而不管我的自定义类注释的意图如何。
接下来我尝试将@TestOnLaunch
注释移动到方法级别。这可以防止“运行时”测试“泄漏”到“标准”场景中,但现在我似乎无法JUnitCore
运行这些测试方法。run.(Request)
例如,Request
针对正确的类和方法,失败并显示“没有可运行的方法”,可能是因为它找不到@Test
注释(因为它不存在)。
我很想知道是否有解决此类问题的“JUnit 方式”。大概我可以编写自己的Runner
(运行用 注释的方法@TestOnLaunch
)——这是正确的方法吗?如果是这样,那么我该如何使用一堆类以编程方式开始测试,类似于调用JUnitCore.run(Class<?>...)
?