在做单元测试时,可能同一个方法需要传很多个不同的参数进行测试,但是写一个测试参数写一个测试方法会比较冗余,那么有什么办法可以将一组参数进行测试吗?答案是有的。
使用 Parameterized,在测试运行期允许使用者使用不同参数多次运行同一个测试。
下面是代码示例:
pom坐标:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>loan-server</artifactId><version>0.0.1-SNAPSHOT</version><name>loan-server</name><description>loan-server</description><properties><java.version>1.8</java.version><testcontainers.version>1.16.0</testcontainers.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.12</version><scope>provided</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.24</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><exclusions><exclusion><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId></exclusion></exclusions><scope>test</scope></dependency><dependency><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/junit/junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/org.jmockit/jmockit --><dependency><groupId>org.jmockit</groupId><artifactId>jmockit</artifactId><version>1.19</version><scope>test</scope></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>1.4.197</version><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.testcontainers</groupId><artifactId>testcontainers-bom</artifactId><version>${testcontainers.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

单元测试代码

@RunWith(Parameterized.class)
public class ValidatorTest {private static final String MAX_MALE_AND_LOAN_AGE = "65";private static final String MAX_LOAN_HOUSE_AGE = "40";private static final String MAX_FEMALE_AND_LOAN_AGE = "60";private Gender gender;private Integer lenderAge;private Integer loanAge;private Integer houseAge;private boolean canLoan;private String failMessage;public ValidatorTest(Gender gender, Integer lenderAge, Integer loanAge, Integer houseAge, boolean canLoan, String failMessage) {this.gender = gender;this.lenderAge = lenderAge;this.loanAge = loanAge;this.houseAge = houseAge;this.canLoan = canLoan;this.failMessage = failMessage;}@Parameterized.Parameterspublic static Collection<Object[]> data() {return Arrays.asList(new Object[][]{{Gender.MALE, 35, 30, 0, true, ""},{Gender.MALE, 36, 30, 0, false, "男性_主贷款人年龄_贷款年限不超过" + MAX_MALE_AND_LOAN_AGE},{Gender.MALE, 34, 32, 0, false, "男性_主贷款人年龄_贷款年限不超过" + MAX_MALE_AND_LOAN_AGE},{Gender.MALE, 35, 25, 16, false, "贷款年限_房龄不超过" + MAX_LOAN_HOUSE_AGE},{Gender.FEMALE, 30, 30, 0, true, ""},{Gender.FEMALE, 31, 30, 0, false, "女性_主贷款人年龄_贷款年限不超过" + MAX_FEMALE_AND_LOAN_AGE}});}@Testpublic void validate_user_loan_result() throws Exception {//givenUserLoanPlanMaterial user = new UserLoanPlanMaterial();user.setLenderAge(lenderAge);user.setGender(gender);HouseMaterial houseMaterial = new HouseMaterial();houseMaterial.setAge(houseAge);user.setHouseMaterial(houseMaterial);//whenString result = Validator.check(user, loanAge);//thenAssert.assertEquals(result, failMessage);}
}

实体类两个

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class HouseMaterial {private Integer age;private BigDecimal price;
}
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UserLoanPlanMaterial {@TableId(type = IdType.AUTO)private Long id;private String idCard;private String name;private Gender gender;private BigDecimal income;private Integer lenderAge;private TogetherLender togetherLender;private HouseMaterial houseMaterial;private LocalDateTime createdAt;private LocalDateTime updatedAt;}

枚举类一个

public enum Gender {FEMALE, MALE
}

接口代码

public class Validator {private static final int MAX_MALE_AND_LOAN_AGE = 65;private static final int MAX_FEMALE_AND_LOAN_AGE = 60;private static final int MAX_LOAN_HOUSE_AGE = 40;public static String check(UserLoanPlanMaterial user, Integer loanAge) {if (user.getGender().equals(Gender.MALE) && (user.getLenderAge() + loanAge > MAX_MALE_AND_LOAN_AGE)) {return "男性_主贷款人年龄_贷款年限不超过" + MAX_MALE_AND_LOAN_AGE;}if (user.getGender().equals(Gender.FEMALE) && (user.getLenderAge() + loanAge > MAX_FEMALE_AND_LOAN_AGE)) {return "女性_主贷款人年龄_贷款年限不超过" + MAX_FEMALE_AND_LOAN_AGE;}if (user.getHouseMaterial().getAge() + loanAge > MAX_LOAN_HOUSE_AGE) {return "贷款年限_房龄不超过" + MAX_LOAN_HOUSE_AGE;}return "";}
}

运行结果如下:
如有问题可以下方留言~
喜欢的朋友欢迎一键三连。我们一起学习,进步~~

Java单元测试--参数化测试Parameterized的使用示例介绍相关推荐

  1. java参数化测试除法_TestNG - 参数化测试( Parameterized Test)

    TestNG - 参数化测试( Parameterized Test) TestNG中另一个有趣的功能是parametric testing . 在大多数情况下,您会遇到业务逻辑需要大量不同测试的情况 ...

  2. JUnit5学习之七:参数化测试(Parameterized Tests)进阶

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于<JUnit5学习>系列 <JU ...

  3. junit 单元测试 - 参数化测试

    junit4.x版本需要引入如下jar包: hamcrest-core-1.3.jar junit-4.12-beta-3.jar 新建一个计算器类,如下: package com.pt;public ...

  4. JUnit5学习之六:参数化测试(Parameterized Tests)基础

    | :-- | :-- | :-- | | 项目主页 | https://github.com/zq2599/blog_demos | 该项目在GitHub上的主页 | | git仓库地址(https ...

  5. java单元测试如何全覆盖_单元测试代码覆盖率的浅谈

    在做单元测试时,代码覆盖率通常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况.比如,代码覆盖率必须达到80%或90%.于是乎,测试人员费尽心思设计案例覆盖代码,用代码覆盖率来衡 ...

  6. 【Java单元测试】如何进行单元测试、异常测试、参数化测试、超时测试、测试多线程

    Junit单元测试的步骤 (1)新建一个单元测试 (2)选择位置 (3)选择需要测试的方法 (4)是否将Junit 4添加到ClassPath中 (5)自动生成的测试类 (6) 然后就可以编写单元测试 ...

  7. python参数化_Python 中如何实现参数化测试的方法示例

    之前,我曾转过一个单元测试框架系列的文章,里面介绍了 unittest.nose/nose2 与 pytest 这三个最受人欢迎的 Python 测试框架. 本文想针对测试中一种很常见的测试场景,即参 ...

  8. Java单元测试实践-01.单元测试概述与示例

    Java单元测试实践-00.目录(9万多字文档+700多测试示例) https://blog.csdn.net/a82514921/article/details/107969340 1. 前言 以下 ...

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

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

最新文章

  1. React中Context API的应用
  2. iPad导入Mac:非常快!一气呵成,直接去photo里面选择,之后左上角倒出就好,颠覆之前windows上面的认知!
  3. 深度学习修炼(一)——从机器学习转向深度学习
  4. Java用sqlit拆分小数_如何将SQLite列中的分隔值拆分为多列
  5. Python安装GDAL库的问题
  6. 酷比魔方iwork8刷机shell_酷比魔方IWORK8旗舰版(I1-T)双系统刷机教程.doc
  7. 虚拟机VMware镜像下载及安装Linux系统
  8. 【DPS专题】工业篇:从“低谷”走向“巅峰”,DPS如何成为工业智能制胜法宝?...
  9. 计算机桌面有浮层,win7电脑桌面便签小工具怎么显示悬浮文字?
  10. 三星S4 GT-I9500 Google服务包及刷机教程
  11. mac上禁用复制粘贴
  12. css设置背景颜色的亮度
  13. python如何读取dbf文件_python2.7读取dbf文件的正确姿势
  14. 推荐一款高颜值免费在线SCI绘图工具~~~
  15. 基于新浪微博API生成短链接的几款在线工具
  16. 货郎担问题(TSP问题)
  17. __dirname和__filename
  18. fedora 14下建立samba服务器
  19. 学习笔记:min-width和min-height
  20. OpenPose(一):根据关键点生成置信图(Confidence Map)

热门文章

  1. PART16 TypeScript高级类型
  2. editplus java快捷键_editplus快捷键大全
  3. 贷款,借钱如何判断是否高利贷?多少利息算高利贷?
  4. python中isin函数_pandas中的isin函数详解
  5. 微信蜜獾服务器,突击手蜜獾直播露脸,被喊话关掉美颜,粉丝:这么帅不女装可惜了...
  6. 简单说明CGI和动态请求是什么
  7. 结构体内元素不确定_农作物生长发育不可缺少的肥料,微量元素肥料,如何才能合理使用...
  8. oncontextmenu
  9. input属性onpaste和oncontextmenu
  10. Windows/Linux环境下达梦数据库的下载、安装及连接