Junit单元测试数据生成工具类
程序员文章站
2022-07-02 12:58:21
在Junit单元测试中,经常需要对一些领域模型的属性赋值,以便传递给业务类测试,常见的场景如下: 如果领域模型的属性特别多,手工去写set方法令人发指,写了一个生成的工具类,用法如下: 生成结果: 工具类代码: package com.enation.app.javashop.saas; impor ......
在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 ""; } }