在日食中设置 JUnit 超时

2022-09-03 07:32:20

问题

当我使用 eclipse 运行所有 JUnit 测试时,是否可以设置默认超时?

背景

我的经理坚持编写单元测试,有时需要长达5分钟才能完成。当我尝试运行整个测试套件(只有大约300个测试)时,可能需要30多分钟。我想放一些东西来阻止任何超过10秒的测试。

我知道个人测试可以用以下方式进行注释:

@Test(timeout=10000)

但这样做会让他的长时间测试总是失败。我希望当他在他的盒子上运行它们时,它们会起作用(如果我必须在签入之前对项目进行微小的调整,那是可以接受的。但是,从 40 个不同的测试文件中删除超时是不切实际的)。

我也知道我可以创建一个蚂蚁任务来为所有测试设置默认超时,大致如下:

<junit timeout="10000">
  ...
</junit>

问题在于,我们通常使用右键单击从 eclipse 内部运行测试,>运行方式> JUnit 测试

总结

那么,有没有一种相对轻松的方法来为所有测试设置超时,也许使用“运行配置”设置,或项目设置,或JUnit首选项,或环境变量,或其他什么?我甚至会满足于安装一些其他插件,让我右键单击特定的测试文件夹,并以其他方式运行所有测试,例如通过蚂蚁或其他方式......


答案 1

可能的解决方案:从另一个类扩展所有测试类:例如TestBase

添加到全局超时。此超时将应用于所有扩展类:TestBase

public class TestBase {
    @Rule
    public Timeout globalTimeout = new Timeout(10000);
}

答案 2

因此,也许将Infinitest与启用“慢速测试警告”以及过滤功能结合使用可以解决问题。您可以识别超出时间限制的测试并将它们添加到过滤器列表中,这只会影响Eclipse内部的测试。通过CLI / CI等可能的构建脚本运行测试根本不会受到影响。您可以在此处找到有关设置的更多信息:http://improvingworks.com/products/infinitest/infinitest-user-guide/


推荐