欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-15 08:57:12
在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 "";
    }

}