在Junit单元测试中,经常需要对一些领域模型的属性赋值,以便传递给业务类测试,常见的场景如下:

 com.enation.javashop.Goods goods = new  com.enation.javashop.Goods();
goods.setBrandId(1);
goods.setCategoryId(1);
goods.setGoodsName("测试商品");
goods.setPrice(1.01);
goods.setSn("100001");
goods.setWeight(1.01);

  

如果领域模型的属性特别多,手工去写set方法令人发指,写了一个生成的工具类,用法如下:

String mockCode = MockDataGenerator.create(Goods.class);

 

生成结果:

com.enation.javashop.Goods goods = new com.enation.javashop.Goods();
goods.setBrandId(819);
goods.setCategoryId(109);
goods.setCost(1.01);
goods.setGoodsId(970);
goods.setGoodsName("random_str748");
goods.setGoodsTransfeeCharge(164);
goods.setHaveSpec(506);
goods.setIntro("random_str344");
goods.setMarketEnable(878);
goods.setMktprice(1.01);
goods.setPrice(1.01);
goods.setSn("random_str316");
goods.setWeight(1.01);

  

工具类代码:

package com.enation.app.javashop.saas;

import com.enation.app.javashop.framework.util.StringUtil;
import org.springframework.beans.BeanUtils; import java.beans.PropertyDescriptor; /**
* 模拟数据生成器
* @author kingapex
* @version 1.0
* @since 7.1.0
* 2019-08-06
*/ public class MockDataGenerator { public static String create(Class clz) { StringBuffer mockStr = new StringBuffer(); PropertyDescriptor[] propertyDescriptors = BeanUtils.getPropertyDescriptors(clz);
String objName = clz.getSimpleName();
char[] chars =objName.toCharArray();
chars[0]+=32;
objName = String.valueOf(chars);
mockStr.append(clz.getName() + " "+ objName+" = new "+ clz.getName() +"();\n");
for (PropertyDescriptor descriptor : propertyDescriptors) {
if (descriptor.getWriteMethod() != null) { String name = descriptor.getWriteMethod().getName();
String value = createValue( descriptor.getPropertyType());
mockStr.append(objName + "." + name + "(" + value + ");\n"); } } return mockStr.toString();
} private static String createValue( Class clz) { if (clz.equals(java.lang.Integer.class)) {
return StringUtil.getRandStr(3);
} if (clz.equals(java.lang.Double.class)) {
return "1.01";
} if (clz.equals(java.lang.String.class)) {
return "\"random_str"+ StringUtil.getRandStr(3)+"\"";
} return "";
} }

Junit单元测试数据生成工具类的更多相关文章

  1. ZXing 二维码解析生成工具类

    原文:http://www.open-open.com/code/view/1455848023292 import com.google.zxing.*; import com.google.zxi ...

  2. 验证码图片生成工具类——Captcha.java

    验证码图片生成工具,使用JAVA生成的图片验证码,调用getRandcode方法获取图片验证码,以流的方式传输到前端页面. 源码如下:(点击下载  Captcha.java) import java. ...

  3. 二维码生成工具类java版

    注意:这里我不提供所需jar包的路径,我会把所有引用的jar包显示出来,大家自行Google package com.net.util; import java.awt.BasicStroke; im ...

  4. Java 二维码生成工具类

    /** * 二维码 工具 * * @author Rubekid * */ public class QRcodeUtils { /** * 默认version */ public static fi ...

  5. java订单生成工具类

    欢迎来到付宗乐个人博客网站.本个人博客网站提供最新的站长新闻,各种互联网资讯. 还提供个人博客模板,最新最全的java教程,java面试题.在此我将尽我最大所能将此个人博客网站做的最好! 谢谢大家,愿 ...

  6. ImageUtil(验证码数据生成工具类)

    登录界面时,常常会使用到验证码图片生成,程序如下: package util; import java.awt.Color; import java.awt.Font; import java.awt ...

  7. id生成工具类

    import java.util.Random; /** * 各种id生成策略 * <p>Title: IDUtils</p> * <p>Description: ...

  8. Vcode的生成工具类,生成制定长度验证码,图文验证码工具类

    public class VCodeUtils { // 使用到Algerian字体,系统里没有的话需要安装字体,字体只显示大写,去掉了1,0,i,o几个容易混淆的字符 public static f ...

  9. java图形验证码生成工具类及web页面校验验证码

    最近做验证码,参考网上案例,发现有不少问题,特意进行了修改和完善. 验证码生成器: import javax.imageio.ImageIO; import java.awt.*; import ja ...

随机推荐

  1. PAT 1012 The Best Rank 排序

    To evaluate the performance of our first year CS majored students, we consider their grades of three ...

  2. thymeleaf Exception processing template "xxx": Exception parsing document: template="xxx", line 6 - column 3报错解决的几种方法

    我是在SpringBoot项目使用Thymeleaf作为模板引擎时报的错误 controller代码非常简单,如下所示: @RequestMapping("/abc") publi ...

  3. JMeter内存溢出:java.lang.OutOfMemoryError: Java heap space解决方法

    一.问题原因 用JMeter压测,有时候当模拟并发请求较大或者脚本运行时间较长时,JMeter会停止,报OOM(内存溢出)错误. 原因是JMeter是一个纯Java开发的工具,内存由java虚拟机JV ...

  4. golang-结构体与指针

    1.结构体 结构体是一系列具有指定数据类型的数据类型 ,就是一个结构体中存储多个不同类型的数据字段 ,用于创建传递复杂数据结构 结构体可以理解为面向对象的模板 ,但是go并非面向对象 ,结构体只是一种 ...

  5. 测试环境部署之填坑记录-Expected one result (or null) to be returned by selectOne(), but found: 2

    最近在部署性能测试环境的时候,环境 部署好以后,部分功能出现接口查询异常,问题现象: 拿到错误,肯定要先判断是前端还是后端代码的问题,最简单的方式是抓包查看: 以上是报错页面捕获的接口报错,很明显的接 ...

  6. Promise的使用

    Promise的简单认识 Promise 是ES6中对异步编程的一种解决方案,可以避免出现回调地狱 Promise最基本的语法 new Promise((resolve, reject) => ...

  7. TOMCAT 8.5 配置优化以及JVM配置(windows server)

    下载官方的tomcat,我这里用的是TOMCAT 8.5.46,然后解压出来,解压后的目录如下图 一.server.xml配置优化 进入conf目录,打开server.xml 文件 1. 找到 < ...

  8. mysql主从配置实现一主一从读写分离

    主从介绍Mysql主从又叫Replication.AB复制.简单讲就是A与B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,实现数据实时同步mysql主从是基于binlog,主上需开启bin ...

  9. Codeforces Round #578 (Div. 2)

    Codeforces Round #578 (Div. 2) 传送门 A. Hotelier 暴力即可. Code #include <bits/stdc++.h> using names ...

  10. JAVA中int转String类型有三种方法

    String.valueOf(i) Integer.toString(i) i+"" i+""也就是一个int型的常量.+上个空的字符串,这里牵涉到了strin ...