在单元测试中,如果测试方法相同,要测试不同的输入参数和输出结果时,通常会有冗余的代码。参数化单元测试的组件,应用在这种场景下。
从JUnit4已经开始支持参数化测试
在测试类上追加@RunWith,指明使用JUnit的Parameterized运行器来运行测试。
在提供数据的方法上追加@Parameterized.Parameters,方法必须是静态static的,并且返回一个集合Collection。
代码如下:
@RunWith(Parameterized.class) public class CalculatorTest { @Parameterized.Parameters public static Collection data() { return Arrays.asList(new Object[][]{{0, 0, 0}, {1, 1, 2}, {2, 1, 3}}); } private int testOpt1; private int testOpt2; private int testResult; private Calculator calculator; public CalculatorTest(int testOpt1, int testOpt2, int testResult) { this.testOpt1 = testOpt1; this.testOpt2 = testOpt2; this.testResult = testResult; } @Before public void setUp() { calculator = new Calculator(); } @Test public void testAdd() throws Exception { int actualResult = calculator.add(testOpt1, testOpt2); assertEquals(testResult, actualResult); } }
再看一下用JUnitParams组建,同样的UT用例的代码量:
@RunWith(JUnitParamsRunner.class) public class CalculatorTestWithJUnitParams { private Calculator calculator; @Before public void setUp() { calculator = new Calculator(); } private Object addTestData() { return new Object[]{ new Object[]{0, 0, 0}, new Object[]{1, 1, 2}, new Object[]{2, 1, 3} }; } @Test @Parameters(method = "addTestData") public void testAdd(int testOpt1, int testOpt2, int testResult) throws Exception { int actualResult = calculator.add(testOpt1, testOpt2); assertEquals(testResult, actualResult); } }
两段代码对比显而易见:
不用通过构造器传递测试参数,用在方法前注解参数内容即可(使用Parameters注解)
测试用例可以指定任意的数据提供方法(使用Parameters里的method)
更简洁的方式:
@RunWith(JUnitParamsRunner.class) public class CalculatorTestWithJUnitParams { private Calculator calculator; @Before public void setUp() { calculator = new Calculator(); } @Test @Parameters({"0, 0, 0", "1, 1, 2", "2, 1, 3"}) public void testAdd(int testOpt1, int testOpt2, int testResult) throws Exception { int actualResult = calculator.add(testOpt1, testOpt2); assertEquals(testResult, actualResult); } }
通过引入import static junitparams.JUnitParamsRunner.$,数据提供方法还可以简化为:
private Object addTestData() { return $( $(0, 0, 0), $(1, 1, 2), $(2, 1, 3) }; }
上面的这些措施 大大简化了测试用例中的重复代码。
maven:
<dependency> <groupId>pl.pragmatists</groupId> <artifactId>JUnitParams</artifactId> <version>1.0.4</version> <scope>test</scope> </dependency>
更高级的使用场景,可以参考:
JUnitParams例子:
https://github.com/Pragmatists/JUnitParams/blob/master/src/test/java/junitparams/usage/Samples_of_Usage_Test.java
相关推荐
Junit参数化测试的使用方法博客 的源代码
junit参数化测试的使用方法,数据驱动:数组,excel
JUnitParams 为 JUnit >=4.6 增加了一个更容易使用的可读性更好的参数测试方式 Example@RunWith(JUnitParamsRunner.class) public class PersonTest { @Test @Parameters({"17, false", "22, ...
//qt单元测试用法,qt测试例子,qt单元测试demo,qt单元测试简单例子,qt单元测试例程,qt单元测试简单例子, qt5单元测试例子,qt5单元测试代码,qt5单元测试工程例子,测试运行ok //首先,用标准的qt测试单元导向,...
JUnit 是一个 Java 编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。 2 单元测试概念 单元:在Java中,一个类就是一个单元 单元测试:...
JUnitParams 为 JUnit >=4.6 增加了一个更容易使用的可读性更好的参数测试方式
myeclipse软件作为编程软件,用junit4完成一个简易计算器测试,实现加减乘除,写的很详细,按着步骤来就行了,最后一个参数测试我没有写,你可以加上
(2)基于Junit5完成单元测试(至少基本测试与参数化测试) 2. 以下为JDK中ArrayList的remove()方法,请应用白盒测试方法设计测试用例,并应用JUnit5完成测试。要求:(1)完成分别满足语句覆盖、判定覆盖、条件...
Hicks-henne型函数翼型参数化,七参数的Hicks-henne型函数翼型参数化基础版,可以在这个基础上进行修改
Jmeter参数化方法汇总教程测试脚本: 1、Jmeter参数化之用户变量 2、Jmeter参数化之用户动态设置变量 3、Jmeter参数化之函数助手 4、Jmeter参数化之CSV配置元件 5、Jmeter参数化之从数据库读取数据
选项A:在Flash中加载镜像文件 选项B:检查配置寄存器 选项C:试图从TFTP服务器启动 选项D:检查NVRAM中的配置文件 国开作业计算机组网技术-单元测试20参考(含答案)全文共2页,当前为第1页。答案:检查配置寄存器...
单元测试概念 被测系统:SUT(System Under Test):表示正在被测试的系统,目的是测试系统能够正确操作 ★测试夹具:(Test Fixture):就是测试运行程序会在测试方法之前自动初始化、回收资源的工作。 Junit4引入的...
以下Matlab项目包含用于使用cst参数化方法生成翼型的源代码和Matlab示例。 CST方法是一种强大的参数化方法,因为它简单、鲁棒,并且能够推广到各种可能的空气动力体。
资源名:直接FFD(DFFD)_几何参数化方法_可以对二维翼型实现参数化_实现网格变形_matlab 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我...
Tekla常用参数化节点。
本实验是软件功能测试与性能测试课程实验的实验三《检查点和参数化实验报告》,实验要求可去对应标题的博文去看,小伙伴们根据需要下载哈~
qtp中使用编程方法实现参数化。 qtp中使用编程方法实现参数化。
这是对QC中将测试用例参数化,可以复用的方法,适用于QC9.0
本人调试无错的QTP订机票参数化测试代码
中科院新科海学校_刘德宝_软件测试视频_LoadRunner性能测试-参数化连接数据库.avi