在junit中计算测试用例的超时值有哪些因素

时间:2015-06-04 06:44:41

标签: java junit junit4

public class JUnitTimeout {
    @Test(timeout = 100)
    public void infinity() {
        //Some code to test
    }
}

为junit测试用例提供特定超时值时需要考虑哪些性能因素。

例如@Test(timeout = 100)如何给出超时值,这里是100

1 个答案:

答案 0 :(得分:2)

我不会将timeout用于常规单元测试。这些测试在不同的计算机上运行,​​具有不同的操作系统,并且运行不同数量的其他进程。这反过来会使一个小的" hickup"你的测试失败,在很多情况下也是你的构建(ant,maven)。将超时设置为接近调用方法通常需要的时间只会变得很麻烦,似乎随机停止构建。

timeout可用于集成测试,不会在每个版本中运行。例如,如果有一个非功能性要求声明Web服务的响应时间不应超过2秒,则可以在部署新版本之前运行调用实际Web服务的超时为2秒的测试,以进行确保要求没有被打破。

编辑:实际上,我发现在常规单元测试中使用超时的原因。我注意到我的构建中的一些测试花了很多时间,结果是测试SOAP客户端无法连接时发生的事情,并且通过尝试调用无效的URL来测试它。问题是有20秒的超时,因此每次构建都需要花费一分钟时间进行三次测试。我通过创建MethodRule来解决它,因此可以为每个类添加一次超时,而不是在每个测试方法中添加一次。因此,确定可大大减慢构建速度的测试就是一个用例。我将超时设置为3-5秒,高于此值的任何事情可能需要花费不必要的时间,并且可能会减慢构建速度。