参数化测试主要解决一次性进行多个测试用例的测试。其主要思想是,将多个测试用例按照,{输入值,输出值}(输入值可以是多个)的列表方式进行测试。
本文使用的是Eclipse+Junit4进行测试。之所以使用Eclipse+Junit4而不是使用Idea+Junit5的环境。是因为Eclipse+junit4环境能够轻易生成ant自动化测试报告。(关于自动化测试报告后面进行讲述)

主要看PeopleTestParameterized.java文件

项目结构

Clothes.java

package barry;public abstract class Clothes {public abstract double getprice();
}

Cap.java

package barry;public class Cap extends Clothes{public double C_price;public double C_discout;public int Discount;Cap(double price, double discout, int Dis){C_price = price;C_discout = discout;Discount = Dis;}@Overridepublic double getprice() {double Price;if(Discount==1){Price = C_price*(1-C_discout);}else{Price = C_price;}return Price;}}

Jacket.java

package barry;public class Jacket extends Clothes{public double J_price;public double J_discout;public int Discount;Jacket(double price, double discount, int Dis){J_price = price;J_discout = discount;Discount = Dis;}@Overridepublic double getprice() {double Price;if(Discount==1){Price = J_price*(1-J_discout);}else{Price = J_price;} return Price;}}

Trousers.java

package barry;public class Trousers extends Clothes{public double T_price;public double T_discount;public int Discount;Trousers(double price, double discount, int Dis){T_price = price;T_discount = discount;Discount = Dis;}@Overridepublic double getprice() {double Price;if(Discount==1){Price = T_price*(1-T_discount);}else{Price = T_price;}return Price;}
}

People.java

package barry;public class People {public Clothes cap;public Clothes jacket;public Clothes trousers;People(){}People(Clothes cap, Clothes jacket,Clothes trousers){this.cap = cap;this.jacket = jacket;this.trousers = trousers;}public double getAllprice(){double Price=0;Price+= cap.getprice();Price+= jacket.getprice();Price+= trousers.getprice();return Price;}public void clear() {this.cap = null;this.jacket = null;this.trousers = null;}public void timetest() {for(int i = 0; i < 100;i++) {}}
}

PeopleTestParameterized.java

package barry;import static org.junit.Assert.*;import java.util.Arrays;
import java.util.Collection;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;//表示使用参数化测试的方法
@RunWith(Parameterized.class)
public class PeopleTestParameterized {private People param;private double result;@Beforepublic void setUp() {People people = new People();}@Afterpublic void tearDown() {}//测试用例使用Collection数据类型返回@Parameterspublic static Collection data() {Cap cap = new Cap(1999,0.1,0);Jacket jacket = new Jacket(2999,0.2,1);Trousers trousers = new Trousers(7999,0.1,1);People p_1 = new People(cap,jacket,trousers);double re_1 = PeopleTest.cal(cap, jacket, trousers);cap = new Cap(19999,0.1,0);jacket = new Jacket(29999,0.2,1);trousers = new Trousers(79999,0.1,1);People p_2 = new People(cap,jacket,trousers);double re_2 = PeopleTest.cal(cap, jacket, trousers);cap = new Cap(199,0.1,0);jacket = new Jacket(9999,0.2,1);trousers = new Trousers(799,0.1,1);People p_3 = new People(cap,jacket,trousers);double re_3 = PeopleTest.cal(cap, jacket, trousers);cap = new Cap(2199,0.1,0);jacket = new Jacket(49999,0.2,1);trousers = new Trousers(6799,0.1,1);People p_4 = new People(cap,jacket,trousers);double re_4 = PeopleTest.cal(cap, jacket, trousers);cap = new Cap(199,0.1,0);jacket = new Jacket(9999,0.2,1);trousers = new Trousers(799,0.1,1);People p_5 = new People(cap,jacket,trousers);//这里故意写错一个double re_5 = PeopleTest.cal(cap, jacket, trousers)+1;return Arrays.asList(new Object[][] {{p_1,re_1},{p_2,re_2},{p_3,re_3},{p_4,re_4},{p_5,re_5},});}//使用构造函数将列表中的数据复制到private中public PeopleTestParameterized(People param, double result){this.param = param;this.result = result;}//观察发现,这里的test1也执行了5次。@Testpublic void test1() {System.out.print("sdf");}//进行多个测试用例测试@Testpublic void testGetAllPrice() {double re=0; assertEquals(result, param.getAllprice());}
}

运行结果
故意写错的那个用例就是[4]

ant报告,就是测试用例10个,但是有一个错误的那个。

小结
在使用参数化测试方法中。

首先要在测试类前一行写入 @RunWith(Parameterized.class) 表明这个类使用的是参数化测试方法。随后定义两个private变量param与result。前者为测试用例输入,后者为测试用例输出。

其次,要确保Collection数据书写正确,参数化测试方法的数据来源即该Collection数据。并且该方法头部使用@Parameters。

第三步,正确书写构造函数,这里的构造函数的功能是将Collection数据列表中数据赋值给两个private变量,param,result。

最后,编写测试代码即可。

单元测试中掌握参数化测试方式是比较重要的,通过以上简单的示例记录本次学习内容。

junit4-参数化测试方法相关推荐

  1. JUnit4参数化和理论示例

    我始终依靠TestNG将参数传递给测试方法,以便为我的测试或套件提供一些灵活性. 但是,使用JUnit4可以实现相同的灵活性. 要使用它很简单: package com.marco.test;impo ...

  2. JUnit4用法详解

    浅谈TDD 测试驱动开发,它是敏捷开发的最重要的部分.方法主要是先根据客户的需求编写测试程序,然后再编码使其通过测试.在敏捷开发实施中,开发人员主要从两个方面去理解测试驱动开发. a)在测试的辅助下, ...

  3. JUnit学习摘要+入门实例 (junit4)

    http://www.cnblogs.com/xwdreamer/archive/2012/03/29/2423136.html 1.学习摘要 看<重构-改善既有代码的设计>这本书的时候, ...

  4. junit 经典示例_JUnit4参数化和理论示例

    junit 经典示例 我始终依靠TestNG将参数传递给测试方法,以便为我的测试或套件提供一些灵活性. 但是,使用JUnit4可以实现相同的灵活性. 要使用它很简单: package com.marc ...

  5. Junit4 简单教程

    一.环境搭建 对于习惯使用Eclipse开发平台来说,Junit早已是非常通常的插件,在Eclipse开发平台中,可以非常方便地搭建Junit测试环境. 1.在Eclipse上创建工程,任何Java工 ...

  6. Junit4使用教程详解

    下载Junit4相关Jar包(一般eclipse等IDE已经集成): 资源链接: https://download.csdn.net/download/yl405001832/11580748 将ja ...

  7. 简述使用混合传递参数时的基本原则_JUnit 5参数化方法测试(一)

    参数化简述 参数化允许我们为测试方法提供数据源(泛指数据集),平常我们使用的最多的或许是不带任何参数的形式,所有的必要数据都在类中或是方法中的本地变量亦或是直接常量写死了,这就导致测试变得较为繁琐,当 ...

  8. junit4使用心得

    没使用junit4之前,测试代码都是通过写一个main方法,在不断的new对象,调用方法来发现错误,使用junit4之后,我发现测试变得简单了,每写一个功能块就可以通过junit4来实现该功能. 那么 ...

  9. 参数化测试 junit_JUnit 5 –参数化测试

    参数化测试 junit JUnit 5令人印象深刻,尤其是当您深入研究扩展模型和体系结构时 . 但是从表面上讲,编写测试的地方,开发的过程比革命的过程更具进化性 – JUnit 4上没有杀手级功能吗? ...

最新文章

  1. 差异与阵列和阵列结构和链表的区别
  2. Advanced Installer 制作.NetWeb部署安装包
  3. Flink异步io应用场景之流表join维表
  4. 【Linux】- 守护进程的启动方法
  5. char* 赋值 const char* 释放_嵌入式Linux开发《C语言专题(十:彻底搞懂“关键字”const)》...
  6. php缩略图代码,php 缩略图实现函数代码_php
  7. Galaxy+note3+android+5.0,三星NOTE3 SM-N9008S原厂刷机包5.0Rom固件ZCSCQD1线刷包
  8. 图解 JVM 内存结构
  9. 发射光功率和接收灵敏度对光模块的实际使用有什么影响?
  10. ps里14号字html里多大,在ps中几号字体是多少点的问题!
  11. flashpaper java_基于FlashPaper实现JSP在线阅读代码示例
  12. JProfiler安装、激活
  13. excel高级筛选怎么用_Excel筛选功能这样用,再多数据我也不惧了
  14. IT架构师_隽语集(Design Thinking _0101)
  15. spring security——学习笔记(day05)-实现自定义 AuthenticationProvider身份认证-手机号码认证登录
  16. 第二章 项目经理评分
  17. Geekon移动电源概念版
  18. 老九学堂数据结构与算法章节1课堂笔记
  19. python批量修改列名_pandas修改DataFrame列名的实现方法
  20. 机器学习-各种距离的定义

热门文章

  1. 改变eclipse的主题,使用IDEA的黑色主题
  2. 学成在线,全部流程图
  3. 最长递增子序列的长度(编程之美)
  4. 人生之路 — 如何处理矛盾
  5. Linux修改分辨率
  6. 【做人】该分肉时就别吃独食
  7. 信息管理毕业设计 SSM的员工_学生宿舍后勤管理系统(源码+论文)
  8. JIT生产方式的目标和方法体系(zt)
  9. CloudSim 学习实例1
  10. Paddle:手写字符总结篇