我目前正在针对我的代码重新使用来自另一个项目的 JUnit 4 测试。作为我的自动化 Ant 构建的一部分,我直接从另一个项目的存储库中获取它们。这很棒,因为它确保我的代码在最新版本的测试中保持绿色。
但是,有一部分测试是我从没想过会传递给我的代码的。但是,如果我开始向这些测试添加@Ignore 注释,我将不得不维护我自己的测试实现的单独副本,我真的不想这样做。
有没有办法在不修改测试源的情况下排除单个测试?这是我到目前为止所看到的:
据我所知,Ant JUnit 任务只允许您排除整个测试类,而不是单个测试方法——所以这对我没有好处,我需要方法粒度。
我考虑将使用反射动态查找和添加所有原始测试的 TestSuite 放在一起,然后添加代码以显式删除我不想运行的测试。但是当我注意到TestSuite API没有提供删除测试的方法时,我放弃了这个想法。
我可以创建自己的测试类来扩展原始测试类,覆盖我不想运行的特定测试,并用@Ignore 注释它们。然后我在我的子类上运行 JUnit。这里的缺点是,如果将新的 Test 类添加到原始项目中,我不会自动选择它们。当新的 Test 类被添加到原始项目时,我将不得不监视它们。到目前为止,这是我最好的选择,但感觉并不理想。
我能想到的唯一其他选择是无论如何都运行糟糕的测试并忽略失败。但是,这些测试需要一段时间才能运行(并且失败!)所以我宁愿根本不运行它们。此外,我看不到告诉 Ant 任务忽略特定测试方法上的失败的方法(再次 - 我看到了如何为单个 Test 类而不是方法做到这一点)。