zoukankan      html  css  js  c++  java
  • 为测试框架model类自动生成xml结果集

    问题:有大量类似于theProductId这样名字的字符串需要转换成the_product_id这种数据库column名的形式。

    思路:见到()大写字母()就插入()一个“_”字符()进去,最后把所有字母都转换为小写。

    解决办法:递归,字符串操作——见缝插针。

    方法如下:

    public static String toDbFormat(String theString, String insertString, int i) {
        StringBuilder sb = new StringBuilder(theString);
        String result = theString;
        if (i < sb.length()) {
            if (Character.isUpperCase(sb.charAt(i))) {
                sb.insert(i, insertString);
                i = i + 2;
            } else {
                i++;
            }
            result = toDbFormat(sb.toString(), insertString, i);
        }
        return result.toLowerCase();
    }

    实际应用——在接口自动化测试框架中根据model类为mybatis文件夹中的xml文件自动生成result部分:

    public static void createXmlOut(Object object) throws IOException{
        //生成mybatis文件夹中xml文件的result部分
        FileWriter writer= new FileWriter("D:\xmlOut.txt");
        @SuppressWarnings("rawtypes")
        Class clz = object.getClass();
        for (java.lang.reflect.Field field : clz.getDeclaredFields()) {
            String target = "<result property=""+field.getName()+"" column=""+toDbFormat(field.getName(), "_", 0)+"" />";
            writer.append(target+"
    ");
        }
        writer.flush();
        writer.close();
    }

    测试方法(这里SomeModel替换为测试框架中实际的model类):

    public static void main(String[] args) throws IOException {
        SomeModel someModel = new SomeModel();
        createXmlOut(someModel);
    }

    执行测试方法后就可以在你的D盘xmlOut.txt文件中看到生成的结果了。完整测试代码如下:

    package com.netease.lede.qa.util;
    
    import java.io.FileWriter;
    import java.io.IOException;
    
    import com.netease.lede.qa.model.duobao.TbDuobaoCoinDetail;
    
    public class CreateResultXMLUtil {
        public static String toDbFormat(String theString, String insertString, int i) {
            // 将变量名转成数据库列名形式
            StringBuilder sb = new StringBuilder(theString);
            String result = theString;
            if (i < sb.length()) {
                if (Character.isUpperCase(sb.charAt(i))) {
                    sb.insert(i, insertString);
                    i = i + 2;
                } else {
                    i++;
                }
                result = toDbFormat(sb.toString(), insertString, i);
            }
            return result.toLowerCase();
        }
    
        public static void createXmlOut(Object object) throws IOException {
            // 生成mybatis文件夹中xml文件的result部分
            FileWriter writer = new FileWriter("D:\xmlOut.txt");
            @SuppressWarnings("rawtypes")
            Class clz = object.getClass();
            for (java.lang.reflect.Field field : clz.getDeclaredFields()) {
                String target = "<result property="" + field.getName() + "" column=""
                        + toDbFormat(field.getName(), "_", 0) + "" />";
                TylanStringUtil.log(target);
                writer.append(target + "
    ");
            }
            writer.flush();
            writer.close();
        }
    
        public static void main(String[] args) throws IOException {
            TbDuobaoCoinDetail tbDuobaoCoinDetail = new TbDuobaoCoinDetail();
            createXmlOut(tbDuobaoCoinDetail);
        }
    }
    View Code
  • 相关阅读:
    各种页的意义
    ecstore Fatal error: Class 'base_request' not found
    viewer.js 视图预览demo
    div在另一个div居中对齐
    文件权限解释rwx
    TPshop各个目录模块介绍
    tpshop linux安装下注意事项
    navicate 远程无法链接linux上mysql数据库问题
    关于破解邮箱的一点心得
    linux开启新端口
  • 原文地址:https://www.cnblogs.com/LanTianYou/p/5873067.html
Copyright © 2011-2022 走看看