java – 在不修改Test类的情况下排除单个JUnit Test方法?
我目前正在使用另一个项目中的JUnit 4测试来反对我的代码.作为我的自动化Ant构建的一部分,我直接从其他项目的存储库中获取它们.这很棒,因为它可以确保我的代码在最新版本的测试中保持绿色.
但是,有一部分测试我从未希望传递给我的代码.但是如果我开始将@Ignore注释添加到那些测试中,我将不得不维护我自己的测试实现的单独副本,我真的不想这样做. 有没有一种方法可以在不修改测试源的情况下排除单个测试?这是我到目前为止所看到的: >据我所知,Ant JUnit任务只允许你排除整个Test类,而不是单独的测试方法 – 这对我没有好处,我需要方法粒度. 解决方法
如果您根本无法接触原始测试,那么您将面临一些严重的限制.你最重要的声音是最好的选择,但有一些变化:
构建特别排除超类的Ant测试,以便运行您不了解的其他类. 您可以使用@Rule注释(JUnit 4.7的新增内容)来了解正在运行的测试并中止它(通过返回空的Statement实现)而不是覆盖特定的方法,让您在知道是否避免测试时更灵活.此方法的唯一问题是您无法使用此方法停止运行@Before方法,这可能很慢.如果这是一个问题(你真的无法触及测试),那么在重写方法中的@Ignore是我唯一能想到的. 但是,如果您可以触摸这些测试,则会打开一些其他选项: 您可以通过在类上指定@RunWith标记来使用自定义运行器运行它们.这个运行器只会将执行传递给该项目中的标准运行程序(JUnit4.class),但是在您的项目中(通过系统属性或其他一些机制)将检查测试名称而不运行测试.这样做的优点是侵入性最小,但最难实现(跑步者是毛茸茸的野兽,@ Rule的既定目标之一是消除制造它们的大部分需求). 另一种方法是在测试中做一个假设的声明,它将检查一些配置设置,如果该测试应该运行则该设置是真的.这实际上涉及注入测试,这很可能是任何远程标记为“单独项目”的交易破坏者. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |