Junit单元测试数据生成工具类

2022-10-16,,,,

在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单元测试数据生成工具类.doc》

下载本文的Word格式文档,以方便收藏与打印。