JUnit4参数测试与时间测试

本文介绍了JUnit4中如何进行参数化测试和时间测试。参数测试通过添加特殊运行器、声明预期值和参数,实现对多个数据集的快速测试。时间测试则允许设定方法的运行时间上限,用于检测潜在的死循环或效率问题。两种时间测试方式分别为直接在@Test注解中设置超时时间,和全局设定测试方法的超时限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇主要是对JUnit4的简单介绍与基本使用,这一篇来说说JUnit的参数(@Parameters)与时间(@Test(timeout) )测试。

参数测试:想要测试的方法有时候会有很多的数据需要测试,如果一个一个的测试,不仅浪费时间而且繁琐,于是JUnit4便提供了参数测试,主要按照以下步骤来做:(以之前的乘法方法来测试)

    为测试方法添加特殊的运行器(@RunWith后面添加运行器);

    声明一些变量,来存放期望值,参数和差值;

    声明一个含有参数的构造函数,并初始化之前的变量;

    声明一个静态的方法,使用@Parameters注解,返回的是Collection集合

    编写测试方法,进行测试

代码如下:

//1、 指定运行器
@RunWith(Parameterized.class)
public class CalculatorTest {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		System.out.println("开始测试");
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
		System.out.println("测试结束");
	}

	//2、声明几个变量,用于存放期望值和测试所用数据
	private double expected;
	private double actualX;
	private double actualY;
	private double deltas;

	//3、为测试类声明带有参数的公共构造函数
	public CalculatorTest(double expected, double actualX, double actualY, double deltas){
		this.expected = expected;
		this.actualX = actualX;
		this.actualY = actualY;
		this.deltas = deltas;
	}

	//4、使用注解@Parameters,返回类型为Collection,静态方法,
	//并初始化所有的需要测试的参数对
	//@Ignore("忽略乘法测试")
	@Parameters
	public static Collection actualData(){
		return Arrays.asList(new Object[][]{
				{6,2,3,0},
				{10,3.3,3,0.2},
				{7,2,3,1},
				{8,3,3,0},//错误
				{12,3,4,0}
		});
	}
	//5、编写测试方法,使用定义的变量作为参数进行测试
	@Test
	public void testMultiply() {
		System.out.println("乘法测试------参数测试");
		Calculator test = new Calculator();
		assertEquals(expected, test.multiply(actualX, actualY), deltas);
	}
我将其它的方法删除了,只留下乘法测试,然后运行,看结果



先看控制台,其实就是对方法进行了五次调用,再看JUnit控制台,五组数据。参数测试就是这么简单。

时间测试:JUnit不仅仅可以测试方法的正确性,也可以测试其运行的时间,比如有的方法出现死循环,或者有的方法需要十几秒甚至几分钟才能运行结束,这是JUnit的时间测试就展现它惊人的测试能力。

这里时间测试有两种写法:

第一种

直接在方法上的Test注解添加“timeout=xxx”

我在之前写的Calculator.java添加了一个方法“time()”写的死循环

	public void time(){
		System.out.println("-----");
		for( ; ; ){
		}
	}
然后在测试类里:

	@Test(timeout=5000)
	public void testTime(){
		Calculator test = new Calculator();
		test.time();
	}
时间的单位是毫秒,也就是说测试“time()”方法,限时5秒,为了更直观的看到时间我在setUpBeforeClass和tearDownAfterClass这些写

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
		System.out.println("开始测试"+df.format(new Date()));
		
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
		System.out.println("测试结束"+df.format(new Date()));
	}
来看看运行结果


正好5秒

第二种:

不需要在指定测试的方法,可以全局的为所有方法测试

	<span style="white-space:pre">	</span>@Test
<span style="white-space:pre">	</span>public void testTime(){
<span style="white-space:pre">		</span>Calculator test = new Calculator();
<span style="white-space:pre">		</span>test.time();
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>@Test
<span style="white-space:pre">	</span>public void testTime2(){
<span style="white-space:pre">		</span>Calculator test = new Calculator();
<span style="white-space:pre">		</span>test.time2();
<span style="white-space:pre">	</span>}
@Rule:允许灵活添加或重新定义测试类中的每个测试方法的行为
这样一来,测试类里的所有方法均可以使用时间测试,结果为



相比较而言,第二种方法比较灵活!

JUnit4的参数与时间测试就介绍到这里......以后还会继续更新的!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值