zoukankan      html  css  js  c++  java
  • Usage and Idioms——Timeout for tests

    如果测试用例运行时不受控制或者运行时间过长,就将其自动判定为运行失败。实现这个功能,有以下2种选择:

    在@Test注释的括号中添加timeout 参数(适用测试方法)

    你可以随意指定一个毫秒级别的时长,如果测试用例运行后超过这个时长,则抛出的 Exception 会触发失败,从而判定测试用例执行失败。用法如下:

    @Test(timeout=1000)

    public void testWithTimeout() {

    ...

    }

    这种方法是靠在单独的线程中运行该测试用例实现的,如果用例运行的时长超过设置时长,用例会执行失败同时JUnit会中断该线程; 如果测试在执行可中断操作时超时,则该线程自动退出;如果测试用例是无限循环,则该线程会一直运行该用例,同时其他用例继续执行。

    Timeout 规则 (适用于测试类中的所有测试方法)

    Timeout 规则适用测试类中的所有测试方法的超时测试,除了在单个@Test注释中指定的timeout会执行外,Timeout规则一般也会执行。

    import org.junit.Rule;
    import org.junit.Test;
    import org.junit.rules.Timeout;
    
    public class HasGlobalTimeout {
        public static String log;
        private final CountDownLatch latch = new CountDownLatch(1);
    
        @Rule
        public Timeout globalTimeout = Timeout.seconds(10); // 10 seconds max per method tested
    
        @Test
        public void testSleepForTooLong() throws Exception {
            log += "ran1";
            TimeUnit.SECONDS.sleep(100); // sleep for 100 seconds
        }
    
        @Test
        public void testBlockForever() throws Exception {
            log += "ran2";
            latch.await(); // will block 
        }
    }


    Timeout rule中定义的timeout 适用于整个测试,包括@Before 或者 @After.如果某个测试方法会无限循环下去,则 @After不会被触发。
  • 相关阅读:
    C++编程练习(3)----“实现简单的栈的顺序存储结构“
    C++编程练习(2)----“实现简单的线性表的链式存储结构“
    C++编程练习(1)----“实现简单的线性表的顺序存储结构“
    Django--登录实例
    Django--model模型绑定_数据库操作
    Django--初始化
    web框架--MVC、MTV
    CSS--箭头
    CSS--抽屉(dig.chouti.com)页面
    jQuery--加一行减一行
  • 原文地址:https://www.cnblogs.com/insist8089/p/6401249.html
Copyright © 2011-2022 走看看