自动生成测试类,并填充测试数据(一)

在这里插入图片描述

一 说明

在日常开发过程中,需要对功能做单元测试,还需要制造测试数据。在测试的过程中,造数是比较蛋疼的事情,并且需要编写大量的set方法。所以就有感制作一个自动生成测试用例的代码。

二 设计思路

内容其实很简单,就是通过固定的字符串拼接 + 反射机制来实现功能。其中有几个需要注意的地方是,判断基本数据类型,List,Map,存在泛型的类,这些是否有复杂的嵌套(暂时没有实现多层嵌套,可以作为优化点。)

由于在开发过程中,核心逻辑都在Service层,所以目前开发了Service的单元测试生成器。后面再计划添加Controller层的。

三 上代码

本代码依赖 hutool 的工具包,请自行添加。

1 工具类 GenStrUtil

package com.cah.project.mock.util;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 功能描述: 本项目的字符串工具类,扩展hutool的StrUtil <br/>
 */
public class GenStrUtil extends StrUtil {
   

    /**
     * 功能描述: 获取类型简称 <br/>
     *
     * @param type 类型
     * @return "java.lang.String"
     */
    public static String getTypeSimpleName(Type type) {
   
        String typeName = type.getTypeName();
        // 是否存在泛型,如 List<E>, Map<K,V>等
        if(typeName.contains("<")) {
   
            String child = typeName.substring(typeName.indexOf("<") + 1, typeName.indexOf(">"));
            String[] children = child.split(",");
            typeName = typeName.substring(0, typeName.indexOf("<"));
            return typeName.substring(typeName.lastIndexOf(".") + 1) +
                    "<" + Stream.of(children).map(c -> c.substring(c.lastIndexOf(".") + 1)).collect(Collectors.joining(", ")) + ">";
        } else {
   
            return typeName.substring(typeName.lastIndexOf(".") + 1);
        }
    }

    /**
     * 功能描述: 获取java类原本引入的包 <br/>
     *
     * @param projectName 项目模块名称
     * @param clazz java类
     * @return "java.lang.String"
     */
    public static String getClassImport(String projectName, Class<?> clazz) {
   
        File javaFile = new File(getJavaFilePath(projectName, clazz));
        try(BufferedReader reader = FileUtil.getUtf8Reader(javaFile)) {
   
            String line;
            StringBuilder sb = new StringBuilder();
            while ((line = reader.readLine()) != null) 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值