上一篇主要是对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的参数与时间测试就介绍到这里......以后还会继续更新的!