转:JUnit中的测试套件和参数化测试
上一篇 /
下一篇 2014-03-27 13:40:39
/ 个人分类:Junit
JUnit4.x的测试运行器
JUnit为单元测试提供了默认的测试运行器,它的测试方法都是由它负责执行的
我们也可以定制自己的运行器,所有的运行器都继承自org.junit.runner.Runner
还可以使用org.junit.runer.RunWith注解 为每个测试类指定使用具体的运行器
一般情况下,默认测试运行器可以应对绝大多数的单元测试要求
当使用JUnit提供的一些高级特性,或者针对特殊需求定制JUnit测试方式时
显式的声明测试运行就必不可少了
JUnit4.x测试套件的创建步骤
① 创建一个空类作为测试套件的入口
② 使用org.junit.runner.RunWith 和org.junit.runners.Suite.SuiteClasses注解 修饰该空类
③ 将org.junit.runners.Suite 作为参数传入RunWith注解,即使用套件运行器执行此类
④ 将需要放入此测试套件的测试类组成数组,作为SuiteClasses注解的参数
⑤ 保证这个空类使用public 修饰,而且存在公开的不带有任何参数的构造函数
下面是JUnit4.x中创建测试套件类的示例代码- package com.jadyer.junit4;
-
- import org.junit.runner.RunWith;
- import org.junit.runners.Suite;
- import org.junit.runners.Suite.SuiteClasses;
-
-
-
-
-
- @RunWith(Suite.class)
- @SuiteClasses({CalculatorTest.class, ParameterTest.class})
- public class TestAll {}
下面是JUnit3.8中创建测试套件类的示例代码
- package com.jadyer.junit3;
-
- import junit.framework.Test;
- import junit.framework.TestCase;
- import junit.framework.TestSuite;
-
-
-
-
-
-
-
-
-
- public class TestAll extends TestCase {
-
- public static Test suite() {
-
- TestSuite suite = new TestSuite();
-
- suite.addTestSuite(CalculatorTest.class);
- suite.addTestSuite(MyStackTest.class);
- return suite;
- }
- }
JUnit4.X的参数化测试
为保证单元测试的严谨性,通常会模拟不同的测试数据来测试方法的处理能力
为此我们需要编写大量的单元测试的方法,可是这些测试方法都是大同小异的
它们的代码结构都是相同的,不同的仅仅是测试数据和期望值
这时可以使用JUnit4的参数化测试,提取测试方法中相同代码 ,提高代码重用度
而JUnit3.8对于此类问题,并没有很好的解决方法,JUnit4.x弥补了JUnit3.8的不足
参数化测试的要点
① 准备使用参数化测试的测试类必须由org.junit.runners.Parameterized 运行器修饰
② 准备数据。数据的准备需要在一个方法中进行,该方法需要满足的要求如下
1) 该方法必须由org.junit.runners.Parameterized.Parameters注解 修饰
2) 该方法必须为返回值是java.util.Collection 类型的public static方法
3) 该方法没有参数 ,方法名可随意 。并且该方法是在该类实例化之前执行的
③ 为测试类声明几个变量 ,分别用于存放期望值和测试所用的数据
④ 为测试类声明一个带有参数的公共构造函数 ,并在其中为③ 中声明的变量赋值
⑤ 编写测试方法,使用定义的变量作为参数进行测试
参数化测试的缺点
一般来说,在一个类里面只执行一个测试方法。因为所准备的数据是无法共用的
这就要求,所要测试的方法是大数据量的方法,所以才有必要写一个参数化测试
而在实际开发中,参数化测试用到的并不是特别多
下面是JUnit4.x中参数化测试的示例代码
首先是Calculator.java
- package com.jadyer.junit4;
-
-
-
-
- public class Calculator {
- public int add(int a, int b) {
- return a + b;
- }
- }
然后是JUnit4.x的参数化测试类ParameterTest.java
- package com.jadyer.junit4;
-
- import static org.junit.Assert.assertEquals;
-
- 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;
-
- import com.jadyer.junit4.Calculator;
-
-
-
-
- @RunWith(Parameterized.class)
- public class ParameterTest {
- private int expected;
- private int input11;
- private int input22;
-
收藏
举报
TAG: