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

参数化测试 junit

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中dataframe合并列名日期到季度_python – 如何在特定日期范围内的pandas列DataFrame中对某些值求和...

我有一个大型的DataFrame,看起来像这样&#xff1a;df UPC Unit_Sales Price Price_Change Date0 22 15 1.99 NaN 2017-10-101 22 7 2.19 True 2017-10-122 22 6 2.19 NaN 2017-10-133 22 7 1.99 True 2017-10-164 22 4 1.99 NaN 2017-10-175 35 15 3.99 NaN 2017-10-096 35 17…

linux环境变量自动配置,Linux进入系统时自动配置 环境变量的要领

用Export命令能够配置环境变量&#xff0c;但是假如每回进入系统之后都要重新配置一遍环境变量就很烦人。Linux给大众提供了自动配置环境变量的要领&#xff0c;那就是修改.bashrc 文件。 通常说来&#xff0c;有两个文件能够提供这种“进入系统时自动配置”的功能&#xff0c;…

金融模型python_盘点金融领域里常用的深度学习模型

作者 | Sonam Srivastava &#xff0c;译者 | sambodhi &#xff0c;编辑 | Vincent &#xff0c;AI前线出品&#xff5c; ID&#xff1a;ai-front在今天我们发布的这篇文章中&#xff0c;作者 Sonam Srivastava 介绍了金融中的三种深度学习用例及这些模型优劣的证据。我们跟随…

Qute模板与Quarkus

Quarkus附带了自己的模板引擎Qute&#xff0c;该引擎已经包含了一组有趣的功能。 在下面的视频中&#xff0c;我将展示基于动作的MVC与JAX-RS的基本用法&#xff0c;该动作将我们的请求转发到HTML模板。 要自己尝试Qute&#xff0c;请查看以下资源&#xff1a; 示例项目 Qut…

linux 7启动文件夹在哪里设置密码,RHEL7 or CentOS7 的系统密码如何重置

导读RHEL7 的世界发生了变化&#xff0c;重置 root 密码的方式也一样。虽然中断引导过程的旧方法(init/bin/bash)仍然有效&#xff0c;但它不再是推荐的。“Systemd” 使用 “rd.break” 来中断引导。让我们快速浏览下整个过程。介绍目的在 RHEL7/CentOS7/Scientific Linux 7 中…

里氏替换原则_代码需要有单一职责,还要开闭,里氏替换又是什么鬼?

目录单一职责原则&#xff1a;开闭原则&#xff1a;里氏替换原则&#xff1a;单一职责原则&#xff1a;每一个系统中的功能都表示一个职责&#xff0c;这些职责可以映射到模块&#xff08;类&#xff09;中&#xff0c;且尽可能的保证这些类中没有功能上的重复&#xff0c;设计…

linux bind日志级别,BIND日志相关(一)

对于排除DNS故障来说&#xff0c;日志文件是极其重要的工具&#xff0c;DNS日志可以记录服务器CPU占用时间&#xff0c;查询统计信息以及配置中存在的问题。经常分析日志可以了解服务器的负荷&#xff0c;性能安全性&#xff0c;从而及时采取措施纠正错误。BIND在默认情况下&am…

junit:junit_简而言之,JUnit:测试结构

junit:junit尽管存在有关JUnit测试的书籍和文章&#xff0c;但我仍然经常遇到程序员&#xff0c;他们至多对这个工具及其正确用法都不甚了解。 因此&#xff0c;我想到了编写多部分教程的想法&#xff0c;从我的角度解释了要点。 也许在本微型系列文章中采用的动手方法可能适合…

联想打印机7256显示更换墨盒_惠普打印机涉嫌垄断?只认自家“昂贵”墨盒,成本太高招架不住...

近日&#xff0c;有人爆料称&#xff0c;所在公司购买的惠普打印机使用原装墨盒时可正常打印&#xff0c;更换其他品牌墨盒后也不能正常使用&#xff0c;因此认为惠普公司有行业垄断的嫌疑。从细节来看&#xff0c;该公司购买了惠普同一型号但不同批次的两台打印机&#xff0c;…

linux mcelog 运行,服务器硬件检测(采用mcelog)

mt 内存监控&#xff1a;mcecheck.pyraid监控&#xff1a; check-raidmcelog 是 x86 的 Linux 系统上用来检查硬件错误&#xff0c;特别是内存和CPU错误的工具。安装方式yum install mcelog运行mcelog查看日志方式/var/log/mcelogMCE 0HARDWARE ERROR. This is NOT a software …

动手选择值

由于冠状病毒的存在&#xff0c;可选的东西在空中&#xff0c;一切都变得可选&#xff0c;例如可选的公共聚会&#xff0c;可选的在家工作&#xff0c;可选的旅行等。 我现在是时候谈论处理NULL引用的软件工程中真正的“ 可选 ”了。 托尼霍尔&#xff08;Tony Hoare&#xf…

python mysql操作_Python的MySQL操作

Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同的方式操作各数据库。Python DB-API使用流程:引入API模块。获取与数据库的连接。执行SQL语句和存储过程。关闭数据库连接。一、安装MySQL客户端MySQLdb 是用于Python链接Mysql数据库的接口&#x…

linux下的遥控器软件下载,Linux操作系统下遥控器的配置及使用方法

你有没有想象过能够坐在沙发上&#xff0c;或者躺在床上&#xff0c;拿着遥控器像操作电视一样来操作电脑&#xff1f;可能你已经见到过市场上出现的那种电脑遥控器&#xff0c;不过它们都是基于windows下的。其实&#xff0c;通过一定的配置&#xff0c;在linux平台上&#xf…

wincc历史数据库_WinCC系统的基本功能介绍——自动化工程师必备

写在面前前面讲解了西门子的TIA Portal Wincc, Wincc Classic和Wincc OA (一文带你了解西门子Wincc),介绍了西门子的超大型/分布式SCADA系统Wincc OA(初识西门子Wincc OA——超大型/分布式SCADA)&#xff0c;还介绍了Wincc Classic的典型架构和选型指南(WinCC V7.5典型架构及选…

apache.camel_Apache Camel 2.14中的更多指标

apache.camelApache Camel 2.14将于本月晚些时候发布。 由于正在解决某些Apache基础结构问题&#xff0c;因此存在一些问题。 这篇博客文章讨论的是我们添加到此版本中的新功能之一。 感谢Lauri Kimmel捐赠了骆驼指标组件&#xff0c;我们将其与出色的Codehale指标库集成在一起…

获取linux详细信息,Linux 获取网口详细信息

一般来说&#xff0c;研究 ifconfig.c 源代码就可以达到目的了。但是Linux已经提供了比较方便的获取网口信息的方式&#xff1a;[philipcatonbj ~]$ cat /sys/class/net/em1/statistics/rx_bytes3911191274在/sys/class/net/INTERFACE/statistics/ 目录下有所有网口的状态&…

python魔法方法str_8.9.魔法方法 - str()方法

# \_\_str\_\_()方法~~~class Car(object):"""定义了一个车类&#xff0c;可以启动和炸街"""def __init__(self, name, max_speed, vehicle_length):""" __init__() 方法&#xff0c;用来做变量初始化 或 赋值 操作""&…

依赖管理和Maven

Maven伟大而成熟。 几乎所有事物都总有解决方案。 您可能在组织项目上遇到的主要情况是依赖管理。 而不是每个项目都没有自己的依赖关系&#xff0c;您需要一种集中化的方式来继承那些依赖关系。 在这种情况下&#xff0c;您可以在父舞会上声明托管依赖项。 在我的示例中&…

linux ps 代码,Linux ps命令详解(示例代码)

ps命令是Process Status的缩写, 用来列出系统中当前运行的那些进程. ps命令列出的是当前那些进程的快照&#xff0c;就是执行ps命令的那个时刻的那些进程&#xff0c;如果想要动态的显示进程信息&#xff0c;就可以使用top命令ps常见命令参数********* simple selection ******…

python hadoop streaming_Hadoop Streaming 使用及参数设置

1. MapReduce 与 HDFS 简介什么是 Hadoop &#xff1f;Google 为自己的业务需要提出了编程模型 MapReduce 和分布式文件系统 Google File System&#xff0c;并发布了相关论文(可在 Google Research 的网站上获得&#xff1a;GFS、MapReduce)。Doug Cutting 和 Mike Cafarella …