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

一个简单的测试

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

一个简单的测试

package com.areyoo.lok.controller;
import com.areyoo.lok.vo.TestTwoVo;

import java.lang.reflect.*;
import java.util.HashSet;
import java.util.ArrayList;

import com.alibaba.fastjson.JSON;
import com.areyoo.lok.service.api.WwService;
import com.areyoo.lok.vo.TestVo;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.junit.Assert;
import org.junit.Before;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import java.math.BigDecimal;
import java.util.*;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;

@ExtendWith(MockitoExtension.class)
class WwControllerTest {
    @InjectMocks
    WwController wwController;

    @Mock
    private WwService wwService;

    @Test
    void testTest() {
    }

    @Test
    void testIndex() {
        when(wwService.index(any())).thenReturn("1hey");
        String result = wwController.index("hey");

        Assert.assertTrue(result.indexOf("hey") > 0);
    }

    @Test
    void testGetTestVo() throws Exception {
        Method method = wwController.getClass().getDeclaredMethod("getTestVo", TestVo.class);
        method.setAccessible(true);
        Object obj = method.invoke(wwController, new TestVo());
        TestVo result = null;
        if (obj instanceof TestVo) {
            result = (TestVo) obj;
        }
        Assert.assertTrue(result != null && result.getCost().equals(new BigDecimal("1")));

        Gson gson = new Gson();
        String json = "{'name':'1','cost':'1','id':'1','f2':'1','count':'1','b':'1','d':'1','set':[],'f':'1','c2':'1','l':'1','i':'1','list':[],'b2':'1','s':'1','s2':'1','d2':'1'}";
        TestVo vo = new Gson().fromJson(json, TestVo.class);

        List vo2 = new Gson().fromJson("[" + json + "]", new TypeToken>() {}.getType());
    }

    private String baseName = "wwController";
    @Test
    void genTest() throws Exception {
        genCode(WwController.class);
    }

    private void genCode(Class myClass) throws Exception {
        String name = myClass.getName();
        Field[] fields = myClass.getDeclaredFields();
        for (Field field : fields) {
            System.out.println("class " + field.getName() + " {");
        }

        methods(myClass.getMethods(), myClass.getDeclaredMethods());
        System.out.println("}");
    }

    private void methods(Method[] publicMethod, Method[] allMethod) throws Exception {
        List resultList = new ArrayList<>(publicMethod.length);
        Collections.addAll(resultList, publicMethod);

        Map map = new HashMap<>();

        for (Method method : allMethod) {

            Class[] classes = method.getParameterTypes();
            Parameter[] parameter = method.getParameters();
            List meta = new ArrayList<>();
            List metaType = new ArrayList<>();

            List parameterType = getMethodParameterTypes(method);
            System.out.println("public void " + method.getName() + "Test() throws Exception {");
            for (int i = 0; i < classes.length; i++) {
                // 取得每个参数的初始化
                if (isVo(classes[i])) {
                    String setLine = parameterType.get(i) + " " + parameter[i].getName()  + " = get" +
                            getType(classes[i].getTypeName()) + "();";
                    System.out.println(setLine);
                    map.put(classes[i].getName(), getAttr(classes[i]));
                } else {
                    String setLine = parameterType.get(i) + " " + parameter[i].getName()  + " = " +
                            getDefaultVal(classes[i].getTypeName()) + ";";
                    System.out.println(setLine);
                }
                meta.add(parameter[i].getName());
                metaType.add(getType(classes[i].getTypeName()) + ".class");
            }

            if (!resultList.contains(method)) {
                String initMethod = "Method method = " + baseName + ".getClass().getDeclaredMethod("" + baseName + "", "
                        + String.join(", ", metaType) + ");";
                System.out.println(initMethod);
                System.out.println("method.invoke(" + baseName + "." + method.getName() + ", " + String.join(", ", meta) + ");");

            } else {
                System.out.println(baseName + "." + method.getName() + "(" + String.join(", ", meta) + ");");
            }
            System.out.println("}");
        }
        for (Map.Entry entry : map.entrySet()) {
            String localType = getType(entry.getKey());
            String fnStr = "public " + localType + " get" + localType
                    + "() {nString json = ""
                    + entry.getValue() + "";n" + localType + " vo = new Gson().fromJson(json, " + localType + ".class);nreturn vo;n}";

            System.out.println(fnStr);
        }
    }

    private List getMethods(Class myClass, Class myClass2) {
        List resultList = new ArrayList<>(myClass2.getMethods().length);
        Collections.addAll(resultList, myClass2.getMethods());

        List list = new ArrayList<>();

        for (Method method : myClass.getMethods()) {
            if (!resultList.contains(method)) {
                list.add(method);
            }
        }
        return list;
    }

    private List getMethods(Class myClass) {
        return getMethods(myClass, Object.class);
    }

    private Boolean isVo(Class myClass) {
        List listMethod = getMethods(myClass);
        for (Method method : listMethod) {
            Class[] parameter = method.getParameterTypes();
            if (method.getName().length() > 3 && method.getName().substring(0, 3).equals("set") && parameter.length == 1) {
                return true;
            }
        }
        return false;
    }

    private String getAttr(Class myClass) throws Exception {
        List result = new ArrayList<>();
        result.add("'" + baseName + "':0");
        for (Method method : getMethods(myClass)) {
            Class[] parameter = method.getParameterTypes();
            if (method.getName().length() > 3 && method.getName().substring(0, 3).equals("set") && parameter.length == 1) {
                result.add("'" + (method.getName().substring(3, 4).toLowerCase()) + method.getName().substring(4) +
                        "':" + getDefaultValue(parameter[0].getName()));
            }
        }
        return "{" + String.join(",", result) + "}";
    }

    public List getMethodParameterTypes(Method method) throws Exception {
        Type[] genericParameterTypes = method.getGenericParameterTypes();
        Class[] parameter = method.getParameterTypes();
        List list = new ArrayList<>();
        for (int i = 0; i < genericParameterTypes.length; i++) {
            Type genericType = genericParameterTypes[i];
            if (genericType instanceof ParameterizedType) {
                ParameterizedType parameterizedType = (ParameterizedType) genericType;

                Type[] types = parameterizedType.getActualTypeArguments();
                List tmpList = new ArrayList<>();
                for (Type type : types) {
                    Class realType = (Class) type;
                    tmpList.add(getType(realType.getName()));
                }
                list.add(getType(parameter[i].getTypeName()) + "<" + String.join(", ", tmpList) + ">");
            } else {
                list.add(getType(parameter[i].getTypeName()));
            }
        }
        return list;
    }

    private String getType(String type) {
        String[] arr = type.split("[.]");
        if (arr.length > 0) {
            return arr[arr.length - 1];
        } else {
            return "";
        }
    }

    private String getDefaultVal(String name) {
        String result = null;
        switch (name) {
            case "java.math.BigDecimal":
                result = "new BigDecimal(1)";
                break;
            case "java.math.BigInteger":
                result = "new BigInteger(1)";
                break;
            case "short":
                result = "(short)0";
                break;
            case "byte":
                result = "(byte)1";
                break;
            case "char":
                result = "'1'";
                break;
            case "long":
            case "java.lang.Long":
                result = "1L";
                break;
            case "int":
            case "java.lang.Integer":
                result = "1";
                break;
            case "double":
            case "java.lang.Double":
                result = "1.0D";
                break;
            case "float":
            case "java.lang.Float":
                result = "1.0F";
                break;
            case "java.lang.String":
                result = ""1"";
                break;
            case "java.lang.Boolean":
            case "boolean":
                result = "true";
                break;
            case "java.util.List":
                result = "new ArrayList<>()";
                break;
            case "java.util.Set":
                result = "new HashSet<>()";
                break;
            default:
                result = "new " + getType(name) + "()";
        }
        return result;
    }

    private String getDefaultValue(String name) {
        String result;

        switch (name) {
            case "java.math.BigDecimal":
            case "java.math.BigInteger":
            case "long":
            case "int":
            case "short":
            case "double":
            case "float":
            case "byte":
            case "char":
            case "java.lang.Long":
            case "java.lang.Integer":
            case "java.lang.Short":
            case "java.lang.Double":
            case "java.lang.Float":
            case "java.lang.String":
                result = "'1'";
                break;
            case "java.lang.Boolean":
            case "boolean":
                result = "true";
                break;
            case "java.util.List":
            case "java.util.Set":
                result = "[]";
                break;
            default:
                result = "{}";
        }
        return result;
    }
}

这个只是生成UT代码的一部份, 本应该用模板的,但为了快先用着

格式不好看ide 格式化

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/445402.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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