我们都有书面的单元测试,其中在一个测试中针对不同的可能的输入输出组合进行测试。 让我们以一个简单的斐波那契数列为例来看看它是如何完成的。

以下代码针对提到的元素数量计算斐波那契数列:

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;public class Fibonacci{public List<Integer> getFiboSeries(int numberOfElements) {List<Integer> fiboSeries = new ArrayList<>(numberOfElements);for (int i = 0; i < numberOfElements; i++) {//First 2 elements are 1,1if (i == 0 || i == 1) {fiboSeries.add(i, 1);} else {int firstPrev = fiboSeries.get(i - 2);int secondPrev = fiboSeries.get(i - 1);int fiboElement = firstPrev + secondPrev;fiboSeries.add(i, fiboElement);}}return fiboSeries;}}

让我们看看使用多个输入值测试上述代码的常规方法

import java.util.List;
import org.junit.Test;
import java.util.Arrays;
import static org.junit.Assert.*;public class FibonacciCachedTest {/*** Test of getFiboSeries method, of class Fibonacci.*/@Testpublic void testGetFiboSeries() {System.out.println("getFiboSeries");int numberOfElements = 5;Fibonacci instance = new Fibonacci();List<Integer> expResult = Arrays.asList(1, 1, 2, 3, 5);List<Integer> result = instance.getFiboSeries(numberOfElements);assertEquals(expResult, result);numberOfElements = 10;expResult = Arrays.asList(1, 1, 2, 3, 5, 8, 13, 21, 34, 55);result = instance.getFiboSeries(numberOfElements);assertEquals(expResult, result);}
}

因此,我们已经能够测试2个输入,想象将以上内容扩展为更多的输入吗? 测试代码中不必要的膨胀。

JUnit提供了另一个名为Parameterized Runner的Runner,它公开了一个带有@Parameters注释的静态方法。 必须实现此方法以返回输入和预期的输出集合,这些集合将用于运行类中定义的测试。 让我们看一下执行此操作的代码:

import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;@RunWith(Parameterized.class)
public class ParametrizedFiboTest {private final int number;private final List<Integer> values;public ParametrizedFiboTest(FiboInput input) {this.number = input.number;this.values = input.values;}@Parameterized.Parameterspublic static Collection<Object[]> fiboData() {return Arrays.asList(new Object[][]{{new FiboInput(1, Arrays.asList(1))},{new FiboInput(2, Arrays.asList(1, 1))},{new FiboInput(3, Arrays.asList(1, 1, 2))},{new FiboInput(4, Arrays.asList(1, 1, 2, 3))},{new FiboInput(5, Arrays.asList(1, 1, 2, 3, 5))},{new FiboInput(6, Arrays.asList(1, 1, 2, 3, 5, 8))}});}@Testpublic void testGetFiboSeries() {FibonacciUncached instance = new FibonacciUncached();List<Integer> result = instance.getFiboSeries(this.number);assertEquals(this.values, result);}}class FiboInput {public int number;public List<Integer> values;public FiboInput(int number, List<Integer> values) {this.number = number;this.values = values;}
}

这样,我们只需要在fiboData()方法中添加一个新的输入和预期的输出就可以了!

翻译自: https://www.javacodegeeks.com/2014/08/parameterized-test-runner-in-junit.html

JUnit中的参数化测试运行器相关推荐

  1. 参数化测试 junit_JUnit中的参数化测试运行器

    参数化测试 junit 我们都有书面的单元测试,其中在一个测试中针对不同的可能的输入输出组合进行测试. 让我们以一个简单的斐波那契数列示例为例,看看它是如何完成的. 以下代码针对提到的元素数量计算斐波 ...

  2. 软件测试——JUnit中的参数化测试

    2019独角兽企业重金招聘Python工程师标准>>> 参数化测试用于当需要使用多组不同的测试数据测试同一个方法的时候. 使用参数化测试的要点: ① 为该测试方法专门生成一个新的类: ...

  3. jsf 传参数_在JSF 2中对定制验证器进行参数化

    jsf 传参数 在JSF 2中编写自定义验证器并不是一项复杂的任务. 您实现Validator接口,添加@FacesValidator批注,并在faces-config.xml中插入validator ...

  4. JUnit:在参数化测试中命名单个测试用例

    几年前,我写了有关JUnit参数化测试的文章 . 我不喜欢它们的一件事是JUnit使用数字命名了单个测试用例,因此,如果它们失败,您将不知道是哪个测试参数导致了失败. 以下Eclipse屏幕快照将向您 ...

  5. 在JSF 2中对定制验证器进行参数化

    在JSF 2中编写自定义验证器并不复杂. 您实现Validator接口,添加@FacesValidator批注,并在faces-config.xml中插入Validator声明, 仅此而已 . 一块蛋 ...

  6. Junit5中的参数化测试(Parameterized Tests)指南

    作为新一代的测试框架,Junit5中有很多大家喜欢的测试方案,个人认为最突出的就是能够进行参数化的测试(Parameterized Tests). 简介 通常,会遇到这样的情况,同一个测试案例,改变的 ...

  7. 浅谈Junit4和TestNG中的参数化测试

    最近在看Junit4的相关知识,由于本身做的是自动化方面的测试,所以工作上着重于应用TestNG.恰好遇到了一个将case进行参数化的需求,故在此记录Junit4和TestNG在参数化方面的区别. 一 ...

  8. junit测试spring_使用Spring JUnit规则进行参数化集成测试

    junit测试spring Spring 4.2附带了全新的JUnit规则: SpringClassRule和SpringMethodRule . 使用JUnit规则的主要优点是让开发人员摆脱Spri ...

  9. 使用Spring JUnit规则进行参数化集成测试

    Spring 4.2附带了全新的JUnit规则: SpringClassRule和SpringMethodRule . 使用JUnit规则的主要优点是让开发人员摆脱SpringJUnit4ClassR ...

最新文章

  1. Redux 入门教程(一):基本用法
  2. 联想计算机无线网络设置密码,联想路由器怎么设置密码
  3. AI赌神升级!无惧bluff,6人局德扑完胜世界冠军,训练只用了8天
  4. 在iOS的XCode工程配置中为什么要用-all_load-ObjC
  5. 火狐浏览器工具栏/折叠菜单怎么设置?火狐浏览器工具栏/折叠菜单定制教程
  6. Shape Number (最小表示法)
  7. python模拟访问js_python模拟http请求,返回“浏览器不支持javascript,请设置您的浏览器开启javascript支持”...
  8. zoj 2112 树状数组 套主席树 动态求区间 第k个数
  9. 如何将多个图像上传到SQL Server
  10. 解决mysql地区时间错误_mysql time zone时区的错误解决
  11. 求职与简历功能上线测试
  12. Atitit 小程序前端api艾提拉总结 索引 目录 1. 基础 37 2 1.1. 系统 38更新 38小程序 39调试 41定时器 42 2 2. 路由 43 2 3. 界面 44 2 3.1.
  13. 数据库学习——SQL之SELECT查询语句
  14. 实时动作游戏同步方式和传输协议选择
  15. cc2430的ram和rom的划分
  16. 我爬取了淘宝零食库,画了一个全国零食地图
  17. 【今日CV 计算机视觉论文速览 第118期】Tue, 21 May 2019
  18. 河南省普通高中学业水平测试计算机,河南省普通高中信息技术学业水平测试综合测试题3(有答案)...
  19. 恒达高停车场信息管理系统的分析与设计
  20. 在线客服——各第三方的收费标准及服务提供

热门文章

  1. JDK,JRE,JVM三者的关系
  2. MySQL中有外键时数据表的删除方法
  3. 可以代表学计算机的标志,桌面上的图标可以用来表示
  4. linux-basic(7)linux文件与目录管理
  5. java如何避免注释重复_Java 8中的可重复注释
  6. nodejs异步测试_异步过程的自动化测试
  7. jgroups_JGroups:无需额外基础架构的领导人选举
  8. junit5 动态测试_JUnit 5 –动态测试
  9. java8 从数组获取流_从数组到流再到Java 8
  10. 加载dll api_运行时类加载以支持不断变化的API