JUnit4学习笔记(二):参数化测试与假定(Assumption)
一、一个简单的测试
编写一个只有一种运算的计算器:
1 public class Calculator { 2 public static double divide(int dividend, int divisor) { 3 return dividend / divisor; 4 } 5 }
为这个方法编写测试:
1 public class CalculatorTest { 2 //允许误差 3 private static final double DELTA = 0.01; 4 5 @Test 6 public void testAdd() throws Exception { 7 assertEquals(3, Calculator.divide(9, 3), DELTA); 8 } 9 }
这个测试中使用9除以3测试了方法,但是我们希望使用多组数据进行测试,并且不需要编写多个方法,这时候可以使用JUnit的参数化测试。
二、参数化测试
在JUnit中,参数化测试有两种形式,第一种形式是构造函数形式,即JUnit遍历所提供的所有参数调用构造函数并执行测试方法:
1 //使用Parameterized Runner执行参数化测试 2 @RunWith(Parameterized.class) 3 public class CalculatorTest { 4 //允许误差 5 private static final double DELTA = 0.01; 6 7 private int dividend; 8 private int divisor; 9 private int result; 10 11 public CalculatorTest(int dividend, int divisor, int result) { 12 this.dividend = dividend; 13 this.divisor = divisor; 14 this.result = result; 15 } 16 17 // 用@Parameterized.Parameters注解标注该方法是返回所有参数,被注解的方法必须返 18 // 回装载数组的Iterable对象,同时必须为public,static,当测试执行时,系统会遍历 19 // 每组参数(数组)调用构造函数并执行测试。 20 @Parameterized.Parameters 21 public static Iterable<Object[]> getParameters() { 22 return Arrays.asList(new Object[][]{ 23 {9, 3, 3}, {5, 1, 5}, {12, 4, 3} 24 }); 25 } 26 27 //当执行测试后,该方法会运行3次 28 @Test 29 public void testDevide throws Exception { 30 assertEquals(result, Calculator.divide(dividend, divisor), DELTA); 31 } 32 } 33
第二种是变量注入形式,变量的值不通过构造函数初始化,而是通过JUnit注入:
1 //使用Parameterized Runner执行参数化测试 2 @RunWith(Parameterized.class) 3 public class CalculatorTest { 4 //允许误差 5 private static final double DELTA = 0.01; 6 7 //使用@Parameter标注public变量,JUnit会遍历每组参数进行注入 8 //注解中的整数参数表示注入参数组中的第几个参数 9 @Parameter(0) 10 public int dividend; 11 @Parameter(1) 12 public int divisor; 13 @Parameter(2) 14 public int result; 15 16 // 用@Parameterized.Parameters注解标注该方法是返回所有参数,被注解的方法必须返 17 // 回装载数组的Iterable对象,同时必须为public,static,当测试执行时,系统会遍历 18 // 每组参数(数组)调用构造函数并执行测试。 19 @Parameterized.Parameters 20 public static Iterable<Object[]> getParameters() { 21 return Arrays.asList(new Object[][]{ 22 {9, 3, 3}, {5, 1, 5}, {12, 4, 3} 23 }); 24 } 25 26 //当执行测试后,该方法会运行3次 27 @Test 28 public void testDivide() throws Exception { 29 assertEquals(result, Calculator.divide(dividend, divisor), DELTA); 30 } 31 }
三、Assumption
在上面参数化的例子中,如果我们提供的参数为{9, 3, 3}, {15, 0, 0}, {12, 4, 3},那第二组参数则会导致测试失败(15除以0会抛出异常),但是在参数化测试中并不应该使用0为除数作为测试,所以应该是测试数据的问题,不应该导致测试失败。使用org.junit.Assume下的各种assume方法能对测试的数据或者环境做出假设,当这种假设不满足时跳过该测试,这样就可以保证在正确的测试环境下执行测试。
1 @Test 2 public void testDivide() throws Exception { 3 //假定除数不为0,若为0跳过该测试 4 assumeTrue("Divisor can't be 0", divisor != 0); 5 assertEquals(result, Calculator.divide(dividend, divisor), DELTA); 6 }
使用上述参数执行该测试,第二组参数所对应的测试会被忽略,而不是失败。
此文转载,如有版权限制,愿意自动放弃
转载于:https://www.cnblogs.com/johnson-blog/p/3890507.html
JUnit4学习笔记(二):参数化测试与假定(Assumption)相关推荐
- 中国大学MOOC实用Python程序设计学习笔记和课后测试1-3周(北京大学)
中国大学MOOC实用Python程序设计学习笔记和课后测试1-3周(北京大学) 第1周 Python初探 为project设置解释器 保留字 第1周课后测试题 第2周 基本运算.条件分支和输出格式控制 ...
- qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)
原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...
- MATLAB学习笔记——二维和三维绘图
MATLAB学习笔记--二维和三维绘图 近期练习matlab的二维和三维绘图,整理一下,以防忘记. 文章目录 MATLAB学习笔记--二维和三维绘图 一.二维绘图 1.plot命令 2.fplot 命 ...
- pythonsze_python学习笔记二 数据类型(基础篇)
Python基础 对于Python,一切事物都是对象,对象基于类创建 不同类型的类可以创造出字符串,数字,列表这样的对象,比如"koka".24.['北京', '上海', '深圳' ...
- 深度强化学习笔记(二)——Q-learning学习与二维寻路demo实现
深度强化学习笔记(二)--Q-learning学习与二维寻路demo实现 文章目录 深度强化学习笔记(二)--Q-learning学习与二维寻路demo实现 前言 理论 什么是Q-Learning 算 ...
- Greedy Match学习笔记二 —— 安慰剂检验与置信区间计算
Greedy Match学习笔记二 -- 安慰剂检验与置信区间计算 上一节我们介绍了Greedy Match的基本原理.本节中,我们将在不同样本量的情况下分别进行安慰剂检验,以验证Greedy Mat ...
- python学习笔记(二) 基本运算
python学习笔记(二) 基本运算 1. 条件运算 基本语法 if condition1: do somethings1elif condition2: do somethings2else: do ...
- StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用
StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用 原文: StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用 Connec ...
- [MyBatis学习笔记] 二、Mybatis基本操作及相关标签介绍
[MyBatis学习笔记] 二.Mybatis基本操作及相关标签介绍 一.Mybatis简介 二.简单的CRUD操作 1.构建SqlSessionFactory (1)编辑mybatis-config ...
- Netty学习笔记二网络编程
Netty学习笔记二 二. 网络编程 1. 阻塞模式 阻塞主要表现为: 连接时阻塞 读取数据时阻塞 缺点: 阻塞单线程在没有连接时会阻塞等待连接的到达,连接到了以后,要进行读取数据,如果没有数据,还要 ...
最新文章
- 1099 Build A Binary Search Tree
- C# AppDomain
- 【AI初识境】近20年深度学习在图像领域的重要进展节点
- Helm部署ElasticSearch Kibana 7 集群
- SoC嵌入式软件架构设计之二:虚拟内存管理原理、MMU硬件设计及代码分块管理...
- 10W 赞的程序员高薪职业建议
- 使用jfreechart来创建一个简单的柱状图
- vs2008 jQuery 智能提示失败可能是Jquery版本问题
- 222.完全二叉树的节点个数
- Unix操作系统常用命令
- nodejs下载 安装 配置环境
- stm32f072--定时器17使用CH1N通道输出pwm时没有波形的原因
- 【预测模型】基于粒子群优化宽度学习实现预测matlab代码
- EPLAN2022程序安装及注意事项
- GPC规范--安全域基础概念
- Element-UI(一) 表格table中实现“加载更多”的功能
- MySQL数据库的SQL语句
- C++中stack的用法(超详细,入门必看)
- iOS代码混淆安全加固
- Java---从键盘输入一位整数,当输入1-7时,输出星期一~星期日
热门文章
- com.alibaba.fastjson.JSONException: not close json text, token : :
- hadoop初始化(hdfs格式化)+简单测试(转载+自己整理)
- ubuntu16.04+Virtualenv+python2.7+Caffe安装(CPU版本,无opencv)
- 判断元素是否在ndarray_专业文章 | 如何判断是否构成有“一定影响”的包装装潢...
- java正则表达式笔记
- 利用zookeeper实现分布式服务故障自动剔除/服务自动注册的思路
- 浙江省经信委与新华三签署战略合作协议
- modelsim显示状态机名称的方法
- ansible命令参数介绍
- bash參考手冊之六(Bash特性)