JUnit 参数化测试和打包测试

学习了JUnit 参数化测试打包测试两种更高效的方法

测试计算圆的面积与周长类

Circle类中有两个方法:Area1(r)求圆形面积,Perimeter(r)求圆形周长。

1
2
3
4
5
6
7
8
9
10
public class Circle {
double Area1(double r){
if(r>0) return r*r*Math.PI;
else return 0;
}
double Perimeter1(double r){
if(r>0) return 2*r*Math.PI;
else return 0;
}
}

选中Circle.java,右键,New->JUnit Test Case.勾选SetUp() TearDown()方法,为Area1方法和Perimeter1方法分别写出测试用例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class CircleTest {
private static Circle circle = new Circle();
@Before
public void setUp() throws Exception {}
@After
public void tearDown() throws Exception {}
@Test
public void testArea1() {
assertEquals(12.56, circle.Area1(2.0), 0.1);
}
@Test
public void testPerimeter1() {
assertEquals(12.56, circle.Perimeter1(2.0), 0.1);
}
}

参数化测试

首先,我们仅测试圆的周长方法Perimeter1(r)。暂且分三类:正数、0、负数。可以最少同时运行三条测试用例。@RunWith(Parameterized.class)这条语句就是为这个类指定了一个ParameterizedRunner
第二步,定义一个待测试的类,并且定义两个变量,一个用于存放参数,一个用于存放期待的结果。
接下来,定义测试数据的集合,也就是上述的data()方法,该方法可以任意命名,但是必须使用@Parameters标注进行修饰。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

@RunWith(Parameterized.class)//为下面的参数化类Perimeter1Test指定特殊运行器
public class Perimeter1Test {
private static Circle Circle = new Circle();

private double param;//参数
private double result;//期望值

@Parameters//参数准备,以@Parameters标识,返回值为Collection类
public static Collection data() {
return Arrays.asList(new Object[][]{
//在该静态方法中声明所有需要测试的参数对,以数组形式存放
{2.0,12.56},
{0,0},
{-2.4,0}
});
}

//构造函数,对变量进行初始化
public Perimeter1Test(double param,double result){
this.param=param;
this.result=result;
}

@Test //测试方法,使用前面定义的变量作为参数进行测试
public void Perimeter11()
{

assertEquals(result,Circle.Perimeter1(param),0.11);
System.out.println("result="+Circle.Perimeter1(param));
}
}

打包测试

通过前面的介绍我们可以感觉到,在一个项目中,只写一个测试类是不可能的,我们会写出很多很多个测试类。可是这些测试类必须一个一个的执行,也是比较麻烦的事情。鉴于此,JUnit为我们提供了打包测试的功能,将所有需要运行的测试类集中起来,一次性的运行完毕,大大的方便了我们的测试工作。具体代码如下:

1
2
3
4
5
6
7
8
9
import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class) //@RunWith标注传递一个参数 Suite.class
@Suite.SuiteClasses({//@Suite.SuiteClasses,来表明这个类是打包测试类
CircleTest.class,
Perimeter1Test.class
})
public class AllTests {}

这个功能也需要使用一个特殊的Runner,因此我们需要向@RunWith标注传递一个参数Suite.class。同时,我们还需要另外一个标注@Suite.SuiteClasses,来表明这个类是一个打包测试类。我们把需要打包的类作为参数传递给该标注就可以了。有了这两个标注之后,就已经完整的表达了所有的含义,因此下面的类已经无关紧要,随便起一个类名,内容全部为空既可。

文章目录
  1. 1. 测试计算圆的面积与周长类
  2. 2. 参数化测试
  3. 3. 打包测试

20160419-junit-1/

本页二维码