在eclipse中设置JUnit超时

gMa*_*ale 16 java eclipse junit unit-testing timeout

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

背景

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

我知道个别测试可以注释:

@Test(timeout=10000)
Run Code Online (Sandbox Code Playgroud)

但这样做会使他的长期测试总是失败.我希望他们在他的盒子上运行时工作(如果我必须在检查之前对项目进行微调,那是可以接受的.但是,从40个不同的测试文件中删除超时是不切实际的).

我也知道我可以创建一个ant任务来为所有测试设置默认超时,类似于:

<junit timeout="10000">
  ...
</junit>
Run Code Online (Sandbox Code Playgroud)

问题是我们通常使用右键单击>运行方式> JUnit测试从Eclipse中运行测试.

摘要

那么是否有一种相对无痛的方法为所有测试设置超时,可能使用运行配置设置,项目设置,或JUnit首选项,或环境变量,或什么?我甚至决定安装一些其他插件,让我右键单击特定的测试文件夹,并以其他方式运行所有测试,如通过蚂蚁或其他东西......

ala*_*ter 11

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

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

public class TestBase {
    @Rule
    public Timeout globalTimeout = new Timeout(10000);
}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的建议.在其他情况下肯定可以使用的东西.但在这种情况下,它需要改变他所有的测试,这不是一个选择. (2认同)

bra*_*ain -2

我知道这并不能真正回答你的问题,但简单的答案是不能!

有条件地设置超时是错误的,因为这样你就会在你的机器上进行单元测试,而你总是会失败。单元测试的目的是能够快速发现您没有破坏任何东西。必须检查失败的测试列表以确保它只是长时间运行的测试,这只会让一些错误得以通过。

正如一些评论者提到的,您应该将测试分成运行快速的单元测试和运行较慢的集成测试,即为您的代码有一个名为 src/main/java 的源文件夹,为单元测试使用 src/test/java ,为单元测试使用 src/ Integration-test/java 用于长时间运行的测试。