java coverage_CoverageRateUtils.java

package com.tf56.riskControlWeb.utils;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStreamWriter;

import java.io.Writer;

import java.util.Random;

import javax.swing.JOptionPane;

import javax.swing.filechooser.FileSystemView;

/**

*@function 提高单元测试覆盖率工具

* 说明 : 生成的文件会放到桌面,目录名称为 : 覆盖率生成工具 - 类包

* 原理 : 每行代码要尽量不一样,文件数数尽量多,那么覆盖率就会更高

*@author 肖荣辉

*@date 2017年12月29日

*/

public class CoverageRateUtils {

//随机器

public static Random random = new Random();

//运算符集合

public static String[] OPERATORS = {"+","-","*","/"};

//生成的桌面目录的路径

public static String DESKTOP_PATH = null;

static{

DESKTOP_PATH = FileSystemView.getFileSystemView().getHomeDirectory().getAbsolutePath() + File.separator + "覆盖率生成工具 - 类包";

//删除原先的目录和文件

deleteFolder(DESKTOP_PATH);

}

/**

*@function 程序入口

*@author 肖荣辉

*@date 2017年12月29日

*/

public static void main(String[] args) throws IOException {

//domain类包路径

String domainPackagePath = "com.tf56.riskControlWeb.politics";

//测试类包路径

String testPackagePath = "com.tf56.riskControlWeb.politics.test";

//文件数量,文件数每提升一个,覆盖率将会大大的提升

int fileCount = 30;

StringBuilder sb = new StringBuilder();

StringBuilder importSb = new StringBuilder();

for(int i = 0 ; i < fileCount ; i ++){

String fileName = generateClassName();

generateDomainFile(fileName , domainPackagePath);

sb.append(generateTestCode(fileName));

importSb.append("import "+domainPackagePath+"." + fileName + ";\n");

}

generateTestFile("PoliticsTest", testPackagePath, importSb.toString(), sb.toString());

JOptionPane.showMessageDialog(null, "生成成功!","覆盖率工具 - 提示",0,null);

}

/**

*@function 生成随机类名

*@author 肖荣辉

*@date 2017年12月29日

*/

public static String generateClassName(){

String[] bigLetters = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};

String[] smallLetters = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};

StringBuilder sb = new StringBuilder(bigLetters[random.nextInt(bigLetters.length)]);

for(int i = 0 ; i < smallLetters.length/2 ; i ++){

sb.append(smallLetters[random.nextInt(smallLetters.length)]);

}

return sb.toString();

}

/**

*@function 生成domain文件

*@author 肖荣辉

*@date 2017年12月29日

*/

public static void generateDomainFile(String fileName , String domainPackagePath) throws IOException{

StringBuilder sb = new StringBuilder("\n\t\tint a = 1;\n");

for(int i = 0 ; i < 1000 ; i ++){

String operator = OPERATORS[random.nextInt(OPERATORS.length)];

int b = random.nextInt(10000);

while("/".equals(operator) && b == 0){

b = random.nextInt(10000);

}

sb.append("\t\ta").append(operator).append("=").append(b).append(";\n");

}

String code = "package "+domainPackagePath+";\npublic class "+fileName+" {\npublic void warfare(){"+sb.toString()+"\t\tSystem.out.println(a);\n}}";

generateFile(DESKTOP_PATH + File.separator + "domain文件" , fileName + ".java", code) ;

}

/**

*@function 生成测试类调用方法的代码

*@author 肖荣辉

*@date 2017年12月29日

*/

public static String generateTestCode(String fileName){

return "\t\t" + fileName + " " + fileName + "= new " + fileName + "();\n\t\t" + fileName + ".warfare();\n";

}

/**

*@function 生成测试文件文件

*@author 肖荣辉

*@date 2017年12月29日

*/

public static void generateTestFile(String fileName , String testPackagePath , String importString , String testCode) throws IOException{

String temp = "package "+testPackagePath+";\n"+

importString.toString() +

"import org.junit.Test;\n"+

"import org.junit.runner.RunWith;\n"+

"import org.springframework.test.context.ContextConfiguration;\n"+

"import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\n"+

"import org.springframework.test.context.web.WebAppConfiguration;\n"+

"@ContextConfiguration(locations = {\"classpath:config/applicationContext.xml\"})\n"+

"@RunWith(SpringJUnit4ClassRunner.class) \n@WebAppConfiguration(value = \"src/main/webapp\")\n"+

"public class "+fileName+" {\n"+

"@org.testng.annotations.Test\n"+

"@Test\n"+

"public void test(){\n"+

testCode +

"}\n"+

"}\n";

generateFile(DESKTOP_PATH + File.separator + "测试文件", fileName + ".java", temp);

}

/**

* @function 根据文本生成文件

* @author ronghui.xiao

* @throws IOException

* @date 2017年6月21日

*/

public static File generateFile(String path , String fileName , String txt) throws IOException{

File file = new File(path);

file.mkdirs(); //创建父级目录

String filePath = path + File.separator + fileName ;

file = new File(filePath);

//若存在则删除

if(file.exists()) file.delete();

file.createNewFile();

Writer fileWriter = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(file), "UTF-8"));

//FileWriter fileWriter = new FileWriter(file);

fileWriter.write(txt);

fileWriter.close();

return file;

}

/**

*@function 根据url删除整个文件及其目录

*@author 肖荣辉

*@date 2017年12月29日

*/

public static boolean deleteFolder(String url){

File file=new File(url);

if(!file.exists()){

return false;

}

if(file.isFile()){

file.delete();

return true;

}

File[] files=file.listFiles();

for(int i=0;i

String root=files[i].getAbsolutePath();//得到子文件或文件夹的绝对路径

deleteFolder(root);

}

file.delete();

return true;

}

}

一键复制

编辑

Web IDE

原始数据

按行查看

历史

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值