栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

单元测试必备工具——自动填充对象数据

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

单元测试必备工具——自动填充对象数据

随机生成数工具(需要hutool依赖)
import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.RandomUtil;
import java.util.ArrayList;
import java.util.List;


public class GenerateData{
    // 常量
    public static String platformId = "ca2446434534665452";

    
    public static String getUUID(){
        return UUID.randomUUID().toString();
    }

    
    public static String getString(int length){
        return RandomUtil.randomString(length);
    }

    
    public static int getInt(int min,int max){
        return RandomUtil.randomInt(min,max);
    }

    
    public static double getDouble(int min,int max){
        return RandomUtil.randomDouble(min,max);
    }

    
    public static List getList(int size,int length){
        List result = new ArrayList<>(size);
        int i = 0;
        while (i < size){
            result.add(getString(length));
            i++;
        }
        return result;
    }
}
自动填充对象类
import java.lang.reflect.Field;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;


public class fillObject {

    
    public static Object fillObject(Class clazz) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
        // 对象实列
        Object o = clazz.newInstance();
        // 对象所有成员变量
        Field[] fields = clazz.getDeclaredFields();
        // 成员变量赋值
        for (Field field : fields){
            // 允许反射修改
            field.setAccessible(true);
            // 固定值变量(通过变量名)
            String fieldName = field.getName();
            if (fieldName.equals("platformId")){
                field.set(o,GenerateData.platformId);
            } else {
                // 随机值变量 (通过数据类型名)
                String typeName = field.getType().getName();
                // 基本类型、基本类型包装类和String类型
                Object value = getValue(typeName);
                if (value != null){
                    field.set(o,value);
                // List类型
                } else if (typeName.contains("List")) {
                    List list = new ArrayList<>();
                    // 泛型类型名
                    String genericTypeName = field.getGenericType().getTypeName();
                    Object value2 = getValue(genericTypeName);
                    // 泛型类型是基本类型、基本类型包装类和String类型
                    if (value2 != null){
                        for (int i = 0; i < 10; i++){
                            list.add(getValue(genericTypeName));
                        }
                     // 其他类型
                    }else {
                        String generatorTypeRoute = genericTypeName.substring(genericTypeName.indexOf("<") + 1,
                                genericTypeName.indexOf(">"));
                        for (int i = 0; i < 10; i++){
                            list.add(fillObject(Class.forName(generatorTypeRoute)));
                        }
                    }
                    field.set(o,list);
                // 其他类型(对象,非集合)
                } else {
                    field.set(o,fillObject(Class.forName(typeName)));
                }

            }
        }
        return o;
    }


    
    private static Object getValue(String type){
        if (type.contains("String")){
            return GenerateData.getString(10);
        } else if (type.contains("int") || type.contains("Integer")){
            return GenerateData.getInt(0,100);
        }else if (type.contains("long") || type.contains("Long") ){
            return GenerateData.getInt(0,100);
        }else if (type.contains("float") || type.contains("Float")){
            return GenerateData.getDouble(0,100);
        }else if (type.contains("double") || type.contains("Double")){
            return GenerateData.getDouble(0,100);
        }else {
            return null;
        }
    }
    public static void main(String[] args) throws IllegalAccessException, ClassNotFoundException, InstantiationException {
        B b = (B) fillObject(B.class);

    }
}


class A{
    String a;
}

class B {
    A a;
    String cc;
    List listA;
    List listString;
}


我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号