Junit 超时测试

超时测试

1.什么是超时测试?

看被测试方法是否在规定的时间内执行完

除了要保证结果争取还要保证在规定的时间内执行完
就像考试那样 不仅要求结果正确还得在规定的时间内写完

被测试方法执行时间>规定时间⇒测试不通过

被测试方法执行时间<规定时间⇒测试通过

2.超时测试的两种方式

  • 使用@Test(timeout=规定时间)

针对某个方法 哪个方法要就写那个方法上面

  • 使用@Rule注解和Timeout对象

针对整个类中的所有方法 只要写一次 对所有方法起作用

3.准备被测试类

javascript 复制代码
package com.jaylan.example.time_out_test;
// 超时测试被测试代码
public class Addtion {
    
     public int add(int x,int y)
     {
	 int result=0;
	 try {
//	     等待5000毫秒 (5s)后执行 
	     //该方法最少要执行 5000毫秒
	     Thread.sleep(5000);
	     //两数相加
	   result=x+y;
	} catch (Exception e) {
	    
	    e.printStackTrace();
	}
	 return result;
	 
     }

}

4.使用@Test(timeout=规定执行时间)进行超时测试

  • 编写测试方法并给每个方法规定执行时间

设置执行时间模板

javascript 复制代码
@Test(timeout=规定执行时间)
测试方法{
  方法体
}

规定执行时间写在参数中 单位是毫秒

javascript 复制代码
package com.jaylan.example.time_out_test;

import static org.junit.Assert.*;

import org.junit.Test;

public class AddtionTest {

    //超时测试 使用@Test(timeout=规定方法执行时间)
    @Test(timeout=6000)
    //规定 要在6000毫秒内执行完毕    能通过
    public void test01() {
	Addtion addtion=new Addtion();
	// 
	assertEquals(2, addtion.add(1, 1));
    }
    @Test(timeout=4000)
    //规定 要在4000毫秒内执行完毕   不能通过(因为 最少执行5000毫秒)
    public void test02() {
	Addtion addtion=new Addtion();
	// 
	assertEquals(2, addtion.add(1, 1));
    }

}
  • 代码执行结果

5.使用@Rule 进行超时测试

  • 导入相关类库
javascript 复制代码
import org.junit.rules.*;//Timeout对象所在类库
import org.junit.Rule;//@Rule注解
  • 创建Timeout对象并设置执行时间
javascript 复制代码
@Rule
public Timeout timeOut=new Timeout(规定执行时间);

!!!Timeout对象必须为public修饰

规定执行时间是Timeout的参数

  • 编写测试方法
javascript 复制代码
@Test //执行时间<6000毫秒 通过
    public void test01() {
	Addtion addtion=new Addtion();
	assertEquals(2, addtion.add(1, 1));
    }
    @Test //执行时间<6000毫秒 通过
    public void test02() {
	Addtion addtion=new Addtion();
	assertEquals(4, addtion.add(2, 2));
    }
  • 完整代码
javascript 复制代码
package com.jaylan.example.time_out_test;
import static org.junit.Assert.*;
import org.junit.Test;
//导入Rule相关类库
import org.junit.rules.*;
import org.junit.Rule;
//使用 @Roule 进行 超时测试
public class AddtionTest2 {

    @Rule
    public Timeout timeOut=new Timeout(6000);
    //创建 规定时间对象  所有执行作用于类中所有执行方法
    //每个方法都必须在 6000毫内执行完毕
  
    @Test //执行时间<6000毫秒 通过
    public void test01() {
	Addtion addtion=new Addtion();
	assertEquals(2, addtion.add(1, 1));
    }
    @Test //执行时间<6000毫秒 通过
    public void test02() {
	Addtion addtion=new Addtion();
	assertEquals(4, addtion.add(2, 2));
    }

}
  • 执行结果

两测试方法都在预期时间内执行完毕测试通过

5.小结

  • 使用@Test(timeout规定执行时间) 只能针对一个测试方法
  • @Test(timeout规定执行时间) 要写在 要进行超时测试的方法上 哪个方法要写哪个上面
  • 使用@Rule 时 则对整个测试类中所有方法有效
  • @Test(time=规定执行时间)针对的是某个方法 而@Rule则对整个类中所有方法都起作用
  • @Rule要创建Timeout对象 且必须为public修饰
  • 两种超时测试的方法 中时间的单位都是毫秒 1000毫秒=1秒
相关推荐
清风徐来QCQ2 小时前
Lombok/SSM/devTools
数据库
LaughingZhu2 小时前
Product Hunt 每日热榜 | 2026-04-05
前端·数据库·人工智能·经验分享·神经网络
2601_949814692 小时前
使用mysql报Communications link failure异常解决
数据库·mysql
搜佛说2 小时前
02-第2章-核心概念与架构
数据库·物联网·微服务·架构·边缘计算·iot
C'ᴇsᴛ.小琳 ℡4 小时前
高性能NoSQL
数据库·nosql
i220818 Faiz Ul4 小时前
动漫商城|基于springboot + vue动漫商城系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·动漫商城系统
iNgs IMAC4 小时前
redis 使用
数据库·redis·缓存
TDengine (老段)6 小时前
TDengine IDMP 可视化 —— 面板
大数据·数据库·人工智能·物联网·ai·时序数据库·tdengine
卓怡学长6 小时前
m315基于java的水果网上商城的开发与设计
java·数据库·spring·tomcat·maven·intellij-idea
刘~浪地球6 小时前
Redis 从入门到精通(八):有序集合操作详解
数据库·chrome·redis