在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. 【HNOI 2017】礼物

    Problem Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手环,一个留给自己,一个送给她.每个手环上各有 \(n\) 个装饰物,并且每个装饰物 ...

  2. linux中crontab任务调度

    一.创建调度任务 指令 crontab -e 进入当前用户编辑界面 crontab -u 用户名 -e 进入指定用户编辑界面 进入crontab任务编辑界面 任务编写格式 #每分钟执行查看一次/ect ...

  3. [browser window窗口大小 算是screen补充吧]主要因为移动IE游览器 写了个兼容

    先上图吧 来上代码 console.log(window.outerWidth + '--' + window.outerHeight);//只读的整数,声明了整个窗口的XY //IE 不支持此属性, ...

  4. Typescript使用字符串联合类型代替枚举类型

    TypeScript宗旨 我觉得Typescript的宗旨是 任何一个 TypeScript 程序,在手动删去类型部分,将后缀改成 .js 后,都应能够正常运行.Typescript是javascri ...

  5. 纯css实现checkbox样式改变

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...

  6. c语言内存

    冯诺依曼结构是:数据和代码放在一起. 哈佛结构是:数据和代码分开存在.内存管理fiLO 先进后出 栈FIFO 先进先出 队列栈的特点是入口即出口,另一个口是堵死的,所以先进去的后出来队列的特点是入口和 ...

  7. angularjs路由传值$routeParams

    AngularJS利用路由传值, 1.导包 <script src="angular.min.js"></script> <script src=&q ...

  8. 18-搭建本地 Registry

    Docker Hub 虽然非常方便,但还是有些限制,比如: 需要 internet 连接,而且下载和上传速度慢. 上传到 Docker Hub 的镜像任何人都能够访问,虽然可以用私有 reposito ...

  9. TP5 ajax请求报500错误

    场景:几个站点从阿里云迁移到腾讯云,然后 TP5项目 ajax请求报500错误 数据返回成功,但是http状态码是500,不走success,一直走error 如下图: 原因分析: 服务器centos ...

  10. Script - 检查当前的undo配置和建议设置 (Doc ID 1579035.1)

    Script - Check Current Undo Configuration and Advise Recommended Setup (Doc ID 1579035.1) APPLIES TO ...