在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 "";
} }

最新文章

  1. MYSQL-GroupCommit
  2. UIView的响应链
  3. Android 进度条
  4. 【HDOJ】2888 Check Corners
  5. WCF入门教程系列五
  6. 关于cvScalar的那些事
  7. 读《图解HTTP》有感-(确保WEB安全的HTTPS)
  8. position 几个属性的作用
  9. 从事三年java开发后, 我打算转人工智能
  10. Ehcache计算Java对象内存大小
  11. Linux文件系统及文件属性
  12. Symbol特殊用途
  13. .NET项目引用黄色小三角以及找不到依赖的解决方法
  14. Prism6下的MEF:基于微软企业库的Cache
  15. nginx 方向代理 jenkins
  16. forget stereo step word out8
  17. Django之模板语法
  18. Quartz 任务调度框架之Hello World
  19. python排序函数sort()与sorted()区别
  20. python并发编程之多进程理论部分

热门文章

  1. Idea2019激活码
  2. ASP.NET Core 3.0 gRPC 配置使用HTTP
  3. (转)Python- sklearn之最小二乘法
  4. 《跟我学shiro》
  5. 大数据相关概念和hdfs
  6. Ling to sql 多表查询,多个条件进行关联
  7. vue-svgicon基本使用
  8. SAP记账期间变式
  9. Hive静态分区和动态分区,对应Mysql中的元数据信息
  10. CSS .css边框属性(border)