JUnit之参数化测试、套件/成组测试的使用
原文地址http://blog.csdn.net/yqj2065/article/details/39967065
参数化测试
正如数组替代int a0,a1,a2一样,测试加法时assertEquals(3.0, h.add(1, 2), 0.1);相当于声明一个变量,要测试100个怎么办。
所以,有了参数化测试,使用一个Collection收集所有的数据——加法时每一次测试需要的几个数据构成一组,n个组构成Collection。
然后按照JUnit的用法要求,写出单元测试类。(偷懒一下,不想写被测试的业务类X了。下面的例子中假设要测试的方法是,判断一个数是否奇数。)
- package myTest.param;
- import java.util.Arrays;
- import java.util.Collection;
- import org.junit.Test;
- import org.junit.runners.Parameterized;
- import org.junit.runners.Parameterized.Parameters;
- import org.junit.runner.RunWith;
- import static org.junit.Assert.assertEquals;
- @RunWith(Parameterized.class)//1.必须
- public class ParametTestUnit {
- private int input;
- private boolean expected;//expected result
- /**
- * 2.public 构造器赋值一组测试数据
- */
- public ParametTestUnit(int input,boolean expected ) {
- this.input = input;
- this.expected = expected;
- }
- /**
- * 3.由@Parameterized.Parameters修饰一个
- * public static Collection xxx()
- */
- @Parameterized.Parameters
- public static Collection data() {
- return Arrays.asList(new Object[][] {
- { 1, true },
- { 3, true },//
- { 6, false },
- { 11, true },
- { 22, false },
- { 23, true }
- });
- }
- /**
- * 4.JUnit循环地使用各组数据
- */
- @Test
- public void testOdd() {
- System.out.println("Parameterized Number is : " + input);
- assertEquals(expected, input%2!=0);
- }
- }
现在这个单元测试类编写完成,但是在BlueJ中不能够直接运行它(不支持?),自己写一个Main好了。
- package myTest.param;
- import org.junit.runner.JUnitCore;
- import org.junit.runner.Result;
- import org.junit.runner.notification.Failure;
- public class Main {
- public static void go() {
- Result result = JUnitCore.runClasses(ParametTestUnit.class);
- for (Failure failure : result.getFailures()) {
- System.out.println(failure.toString());
- }
- System.out.println(result.wasSuccessful());
- }
- }
运行结果:
Parameterized Number is : 1
Parameterized Number is : 3
Parameterized Number is : 6
Parameterized Number is : 11
Parameterized Number is : 22
Parameterized Number is : 23
true
现在,将某个数据修改一下,如{ 11, true }改成{ 10, true },运行结果:
Parameterized Number is : 1
Parameterized Number is : 3
Parameterized Number is : 6
Parameterized Number is : 10
Parameterized Number is : 22
Parameterized Number is : 23
testOdd[3](myTest.param.ParametTestUnit): expected:<true> but was:<false>
false
表示第3个数据(基于0)有问题。
成组测试
有很多单元测试类需要测试,将它们组成一个Suite,大家一起测试。例如新写了两个单元测试类:
- package myTest.param;
- import static org.junit.Assert.assertEquals;
- public class AddUnit1 {
- @org.junit.Test
- public void testAdd() {
- System.out.println("Inside AddUnit1");
- assertEquals(3, 1+2);
- }
- }
- package myTest.param;
- import static org.hamcrest.CoreMatchers.*;
- import static org.junit.Assert.*;
- public class AddUnit2 {
- @org.junit.Test
- public void testSth() {
- System.out.println("Inside AddUnit2");
- assertThat("Zero is one", 0, is(not(1))); // passes
- assertThat("Zero is one", 0, is(1)); //fail
- }
- }
将它们组成一个Suite,需要写捆绑代码,清晰起见,单独用一个类。
- package myTest.param;
- import org.junit.runner.RunWith;
- import org.junit.runners.Suite;
- @RunWith(Suite.class)
- @Suite.SuiteClasses({
- AddUnit1.class,
- AddUnit2.class,
- //ParametTestUnit.class
- })
- public class SuiteUnit {}
还是用上面的Main,修改为runClasses(SuiteUnit.class); 运行结果:
Inside AddUnit1.testAdd()
Inside AddUnit2.testSth()
testSth(myTest.param.AddUnit2): Zero is one
Expected: is <1>
got: <0>
false
可以把对ParametTestUnit.class的测试也加进来。运行结果:
Inside AddUnit1.testAdd()
Inside AddUnit2.testSth()
Parameterized Number is : 1
Parameterized Number is : 3
Parameterized Number is : 6
Parameterized Number is : 10
Parameterized Number is : 22
Parameterized Number is : 23
testSth(myTest.param.AddUnit2): Zero is one
Expected: is <1>
got: <0>
testOdd[3](myTest.param.ParametTestUnit): expected:<true> but was:<false>
false
JUnit之参数化测试、套件/成组测试的使用的更多相关文章
- junit测试套件
在实际项目中,随着项目进度的开展,单元测试类会越来越多,可是直到现在我们还只会一个一个的单独运行测试类,这在实际项目实践中肯定是不可行的.为了解决这个问题,JUnit 提供了一种批量运行测试类的方法, ...
- unittest测试套件
测试套件就是测试集,测试集是测试用例的集合. a.按用例顺序执行(addtest) 当addtest与unittest的测试规则冲突时,仍然按照ASCII码的顺序执行. import unittest ...
- Python+Selenium笔记(四):unittest的Test Suite(测试套件)
(一) Test Suite测试套件 一个测试套件是多个测试或测试用例的集合,是针对被测程序的对应的功能和模块创建的一组测试,一个测试套件内的测试用例将一起执行. 应用unittest的TestSui ...
- Robot Framework(四)创建测试套件
2.3.1测试用例文件 Robot Framework测试用例是使用测试用例文件中的测试用例表创建的.这样的文件会自动从它包含的所有测试用例中创建一个测试套件.可以有多少测试用例没有上限,但建议少于1 ...
- python+unittest框架第二天unittest之简单认识Test Suite:测试套件
今天了解下测试套件Test Suite,什么是测试套件,测试套件是由多个Test Case测试用例组成的,当然也可以由多个子测试套件组成. 接下来看下如果构建测试套件,构建测试套件的方法: 1.用un ...
- junit 测试套件Suite
junit测试套件,就是可以运行一个测试类使得一个或一些测试类被junit测试运行 见代码: 测试套件类: import org.junit.runner.RunWith; import org.ju ...
- JUnit4中的测试套件
测试套件 JUnit3.8中,用测试套件同时运行多个测试类(http://www.cnblogs.com/mengdd/archive/2013/04/07/3006265.html). 在JUnit ...
- 安卓CTS官方文档之兼容性测试套件简介-attach
官方英文文档原文:https://source.android.com/compatibility/cts-intro.html Compatibility Test Suite 兼容性测试套件 H ...
- 安卓CTS官方文档之兼容性测试套件简介
官方英文文档原文:https://source.android.com/compatibility/cts-intro.html Compatibility Test Suite 兼容性测试套件 Ho ...
随机推荐
- Sencha Touch快速入门(译)
翻译自:http://www.sencha.com/learn/sencha-touch-quick-start/ 1.下载Sencha Touch SDK——下载链接 2.安装Safari或Chro ...
- ifcfg-<interface-name> 文件配置详解
TYPE=Ethernet #网卡类型DEVICE=<name> <name>表示物理设备的名字I ...
- 学习《深入理解C#》—— 泛型 (第三章3.1---3.2)
泛型是什么? 泛型(generic)是C# 2.0和通用语言运行时(CLR)的一个新特性.泛型为.NET框架引入了类型参数(type parameters)的概念.类型参数使得设计类和方法时,不必确定 ...
- Sublime Text 更新后,Package Control 不见了的解决办法
把红框内配置删掉就可以了! via:http://www.qdfuns.com/notes/14464/f6813e4e18ac31bd856fe17fc8772ebc.html PS: ...
- Unable to acquire Oracle environment handle 问题的解决
---恢复内容开始--- 转自:http://blog.csdn.net/zhangweiwindow/article/details/6575224 今天重装了一下系统,所以以前工作时配置的pyth ...
- 设置eclipse中python脚本的编码格式
今天在运行python脚本时报如下错误: SyntaxError: Non-ASCII character '\xe5' in file D:\pythonlearn1\src\day01\direc ...
- 【BZOJ3232】圈地游戏 分数规划+最小割
[BZOJ3232]圈地游戏 Description DZY家的后院有一块地,由N行M列的方格组成,格子内种的菜有一定的价值,并且每一条单位长度的格线有一定的费用. DZY喜欢在地里散步.他总是从任意 ...
- 160408、SpringMVC整合Shiro
第一步:配置web.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <!-- 配置Shiro过滤器,先让Shiro过滤系统接收到的请求 --> ...
- 面试之二:Redis是单线程还是多线程?以及处理模型。
Redis是单线程还是多线程?以及处理模型. 线程:单线程 处理模型:参考书<Redis 设计与实现>P151-152 ![](https://ws1.sinaimg.cn/large ...
- CodeForces 732B Cormen — The Best Friend Of a Man
B. Cormen - The Best Friend Of a Man time limit per test 1 second memory limit per test 256 megabyte ...