一、安装JUnitGenerator V2.0。

  1、通过网络安装。如下

  2、手动下载插件安装。插件下载:https://plugins.jetbrains.com/idea/plugin/3064-junitgenerator-v2-0 。安装如下图所示:

  3、安装完成重启IDEA,即可使用。

二、修改JUnitGenerator V2.0的配置。

  1、自动生成测试代码和java类在同一包下,不匹配maven项目标准测试目录。

     修改Output Path为:${SOURCEPATH}/../../test/java/${PACKAGE}/${FILENAME},

       Default Template选择JUnit 4。

  2、修改测试用例模板。模板中生成的package的包名需去掉test。

三、生成JUnit4测试用例。

  方法一:在待编写测试的java类源码块上按快捷键Alt + Insert。选择JUnit Test->JUnit 4。

  方法二、在待编写测试的java类源码块上按快捷键Ctrl + Shift + T。

  根据需要修改相关测试用例

  方法三:光标定位到待编写测试的java类源码块,选择code->Generate,后面的步骤和方法1一样。

  最终生成的用例如下:

四、注意。

  IDEA自带的JUnit插件和JUnitGeneratorV2.0插件都要勾选上,若只勾选JUnit可能导致无法自动生成测试文件,

  若只勾选JUnitGenerator V2.0可能导致生成的测试文件无法运行

实体类junit测试用例生成

package com.wms;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map; /**
* Created by Administrator on 2017/4/8.
*/
public class Test { private static final StringBuilder sb = new StringBuilder(); public static void writeClass(String classStr, OutputStreamWriter out) {
try {
Class clz = Class.forName(classStr);
// Method[] methods = clz.getDeclaredMethods();
// for (Method method : methods) {
// String methodName = method.getName();
// Class[] params = method.getParameterTypes();
// for (Class param : params) {
// System.out.println(param.getName());
// }
// }
Field[] fields = clz.getDeclaredFields(); for (Field field : fields) {
Class c = field.getType();
// System.out.println(c.isInterface());
// System.out.println(c.getName());
// Class cc = Class.forName(c.getName());
// Object o = cc.newInstance();
//只写入set方法即可 out.write(setMethod(classStr, getParam(c, field.getName()), field.getName()));
} } catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} public static Map<String, Object> getParam(Class clz, String field) { Map<String, Object> map = new HashMap<String, Object>();
boolean isReference = false;
String result = ""; String className = clz.getName();
String clzName = className;
if (className.contains(".")) {
clzName = className.substring(className.lastIndexOf(".") + 1);
}
clearSb(sb);
if (clz.isInterface()) {
result = null;
} else if (className.startsWith("[L")) {
clzName = clzName.replaceAll(";", "");
sb.append(clzName).append("[] o = ").append("new ").append(clzName).append("[]{};");
result = sb.toString();
isReference = true;
} else if (clz == String.class) {
sb.append("\"").append(field).append("\"");
result = sb.toString();
} else if (clz == Integer.class || clz == int.class) {
result = "1";
} else if (clz == Long.class || clz == long.class) {
result = "1L";
} else if (clz == Float.class || clz == float.class) {
result = "1.1f";
} else if (clz == Double.class || clz == double.class) {
result = "1.1";
} else if (clz == Short.class || clz == short.class) {
result = "(short)1";
} else if (clz == Boolean.class || clz == boolean.class) {
result = "true";
} else if (clz == char.class || clz == Character.class) {
result = "\'1\'";
} else if (clz == byte.class || clz == Byte.class) {
result = "(byte)1";
} else {
sb.append(clzName).append(" o = ").append("new ").append(clzName).append("();");
result = sb.toString();
isReference = true;
} map.put("result", result);
map.put("isReference", isReference); return map;
} public static String setMethod(String classStr, Map<String, Object> map, String field) {
clearSb(sb);
classStr = classStr.substring(classStr.lastIndexOf(".") + 1);
boolean isReference = (Boolean) map.get("isReference");
String result = (String) map.get("result");
String str = firstLowerToUpper(field);
sb.append("\t");
sb.append("@Test").append("\n");
sb.append("\t");
sb.append("public void testSet").append(str).append("()").append("\n");
sb.append("\t");
sb.append("{").append("\n");
sb.append("\t").append("\t");
sb.append(classStr).append(" obj = new ").append(classStr).append("();").append("\n");
sb.append("\t").append("\t"); if (isReference) {
sb.append(result).append("\n");
result = "o";
sb.append("\t").append("\t");
} sb.append("obj.set").append(str).append("(").append(result).append(");").append("\n");
sb.append("\t").append("\t");
sb.append("assertTrue(").append(result).append(" == obj.get").append(str).append("());")
.append("\n");
sb.append("\t");
sb.append("}").append("\n").append("\n");
return sb.toString();
} public static String firstLowerToUpper(String field) {
return field.substring(0, 1).toUpperCase() + field.substring(1);
} public static void createTestFile(String projectPath, String[] pkgs, boolean rebuild) {
OutputStreamWriter out = null;
for (String pkg : pkgs) { String testPkgPath = checkTestPackage(projectPath, pkg);
String srcPkgPath = getJavaPackagePath(projectPath, pkg); File file = new File(srcPkgPath);
for (File file1 : file.listFiles()) { String className = getClassName(file1.getName());
File testFile = new File(getTestFile(testPkgPath, className));
if (!testFile.exists() || rebuild) {
try {
//0. 创建测试用例文件
testFile.createNewFile(); //1. 写入测试用例类的包名
out = new FileWriter(testFile);
out.write(packageLine(pkg)); //2. 写入junit测试用例用到的包
out.write(importJunitClassLine()); //3. 写入测试用例类名
out.write(startClassNameLine(className + "Test")); //4. before,after方法写入
// out.write(beforeMethod());
// out.write(afterMethod()); //5. 写入测试方法
writeClass(getClass(pkg, className), out); // 类结束
out.write(endClassNameLine());
out.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
} } /**
* 检查测试类路径下的指定包是否存在,不存在则创建
*
* @param projectPath
* @param pkg
* @return
*/
public static String checkTestPackage(String projectPath, String pkg) {
String dstPath = getTestPackagePath(projectPath, pkg);
File f = new File(dstPath);
if (!f.exists()) {
f.mkdirs();
}
return dstPath;
} /**
* 获取测试类的全路径名
*
* @param dstPackage
* @param className
* @return
*/
public static String getTestFile(String dstPackage, String className) {
clearSb(sb);
sb.append(dstPackage).append(File.separator).append(className).append("Test.java");
return sb.toString();
} /**
* 包声明行
*
* @param pkg
* @return
*/
public static String packageLine(String pkg) {
clearSb(sb);
sb.append("package ").append(pkg).append(";");
sb.append("\n").append("\n");
return sb.toString();
} /**
* junit类导入行
*
* @return
*/
public static String importJunitClassLine() {
clearSb(sb);
sb.append("import org.junit.Test;").append("\n");
sb.append("import org.junit.Before;").append("\n");
sb.append("import org.junit.After;").append("\n").append("\n").append("\n");
sb.append("import static org.junit.Assert.*;").append("\n").append("\n");
return sb.toString();
} /**
* 类开始
*
* @param fileName
* @return
*/
public static String startClassNameLine(String className) {
clearSb(sb);
sb.append("public class ").append(className).append("\n");
sb.append("{").append("\n");
return sb.toString();
} /**
* 类结束
*
* @return
*/
public static String endClassNameLine() {
return "\n}";
} /**
* beforeMethod
*
* @return
*/
public static String beforeMethod() {
clearSb(sb);
sb.append("\n").append("\t").append("@Before").append("\n");
sb.append("\t").append("public void before()").append("\n");
sb.append("\t").append("{").append("\n");
sb.append("\t").append("}").append("\n");
return sb.toString();
} /**
* afterMethod
*
* @return
*/
public static String afterMethod() {
clearSb(sb);
sb.append("\n").append("\t").append("@After").append("\n");
sb.append("\t").append("public void after()").append("\n");
sb.append("\t").append("{").append("\n");
sb.append("\t").append("}").append("\n");
return sb.toString();
} /**
* 获取类全名,含有包
*
* @param pkg
* @param className
* @return
*/
public static String getClass(String pkg, String className) {
return pkg + "." + className;
} /**
* 获取类名,不含包
*
* @param fileName
* @return
*/
public static String getClassName(String fileName) {
return fileName.replace(".java", "");
} /**
* 获取java源文件路径下的指定包
*
* @param projectPath
* @param pkg
* @return
*/
public static String getJavaPackagePath(String projectPath, String pkg) {
String packagePath = pkg.replaceAll("\\.", "/");
return projectPath + "/src/main/java" + File.separator + packagePath;
} /**
* 获取java测试类路径下的指定包
*
* @param projectPath
* @param pkg
* @return
*/
public static String getTestPackagePath(String projectPath, String pkg) {
String packagePath = pkg.replaceAll("\\.", "/");
return projectPath + "/src/test/java" + File.separator + packagePath;
} /**
* 清空StringBuilder
*
* @param sb
*/
public static void clearSb(StringBuilder sb) {
sb.delete(0, sb.length());
} public static void main(String[] args) throws IOException {
String projectPath = "D:/data/IDEA workspace/wms-web";
String[] pkgs = new String[]{"com.wms.junit"}; createTestFile(projectPath, pkgs, true);
//loadClass("com.wms.junit.Person", null);
} }

IDEA Junit4配置的更多相关文章

  1. Spring项目使用Junit4测试配置

    我们经常要写junit测试,在不启动整个web项目的情况下,测试自己的service实现或者是dao实现,我们来充分利用下junit4的强大功能. 1.junit4的测试类 import java.u ...

  2. JUnit4.13环境配置

    Junit 4.13环境配置 JUnit是一个强大的单元测试工具.它可以针对某一个特定类的所有方法进行精确打击.这个东西具体怎么使用,留在以后说.这次给大家说说idea下配置JUnit环境的方法. 1 ...

  3. SpringMVC+Hibernate+Junit4+json基本框架近乎0配置

    公司是做APP开发的,须要后台来提供接口,于是乎,这个任务就交给我,经过重复的尝试,学习和參考别人的demo,最终搭出自己还算惬意的框架.SpringMVC+Sping3+Hibernate4+Jun ...

  4. IDEA 配置Junit4

    Junit4 主要用来执行java程序的单元测试: 1 安装junit4插件 因为我安装过了,没有安装的再输入框搜索,然后安装就行 2 选择默认使用Junit4 3 红框中的test去掉,变为“$en ...

  5. 当使用junit4 对spring框架中controller/service/mapper各层进行测试时,需要添加的配置

    @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(locations = {&quo ...

  6. java:Mybatis框架1(基本配置,log4j,Junit4(单元测试))

    1.mybatis01: db.properties: driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test userna ...

  7. 使用Junit4对web项目进行测试(一)Junit初配置

    Junit测试用例不是用来证明你是对的,而是用来证明你没有错 1.功能   -在项目未在浏览器运行之前对获得的结果和预期的结果进行比较调试,减少BUG和发布时的修复工作 2.测试类和代码类应分开存放. ...

  8. junit4进行单元测试

    一.前言 提供服务的时候,为了保证服务的正确性,有时候需要编写测试类验证其正确性和可用性.以前的做法都是自己简单写一个控制层,然后在控制层里调用服务并测试,这样做虽然能够达到测试的目的,但是太不专业了 ...

  9. EhCache的配置

    JPA和Hibernate的二级缓存都是这样做的 代码目录: 这是基础的jar包,如果少的话,再去maven下载 <!-- Spring --> <dependency> &l ...

随机推荐

  1. Hadoop shell命令

    1.FS Shell 调用文件系统(FS)shell命令应使用bin/hadoop fs <args>的形式.所有的的FS shell命令使用URI路径作为参数.URI格式是scheme: ...

  2. Jmeter在非GUI(命令行)模式下生成测试报告

    根据各大招聘网站上的需求来看,熟悉Jmeter做性能测试已经几乎成为必要条件了. 那么今天在这个给大家安利一波,怎么使用Jmeter在非GUI(命令行)模式下生成测试报告呢?? 条件准备: 1.Jme ...

  3. python自动化开发-5b

    python的常用模块(续) time和datetime模块 time模块和datetime模块举例 例子:获取当前时间 import datetime,time now = time.strftim ...

  4. Salesforce的基础用户界面定制

    Salesforce的用户界面 Salesforce的用户界面易于定制.本文将讲述如何定制: 主菜单和选项卡 自定义按钮和链接 视图列表 页面布局 定制主菜单和选项卡 Salesforce的主菜单默认 ...

  5. WebStorm连接Github教程

    上学期刚开学的时候看过一次git相关的内容,很久没用过,忘了,两个月前又看了一次还精心做了笔记,也没有具体使用,又忘了,所以,避免又双叒叕忘了,我决定正式把git用起来.刚开始是通过Git Bash来 ...

  6. python第七十六天--堡垒机完成

    堡垒机windows ,linux 都通过测试初始化说明: #进入根目录 1.初始化表结构 #python3 bin/start.py syncdb 2.创建堡垒机用户 #python3 bin/st ...

  7. django模板语言之Template

    当前端的一些数据需要后端传送过来并展示时,用到了django的模板语言,模板语言的作用就是,在后端把一些处理好的数据,通过模板语言所规定的格式,通过render渲染,放到前端页面固定的位置展示.这之间 ...

  8. CSS| 框模型-定位及相關屬性

    CSS 定位 (Positioning) 属性允许你对元素进行定位. CSS 定位和浮动 CSS 为定位和浮动提供了一些属性,利用这些属性,可以建立列式布局,将布局的一部分与另一部分重叠,还可以完成多 ...

  9. logstash之input、codec学习

    Logstash最强大的功能在于丰富的过滤器插件.此过滤器提供的并不单单是过滤的功能,还可以对进入过滤器的原始数据进行复杂的逻辑处理.甚至添加独特的事件到后续流程中. 1.logstash基本语法组成 ...

  10. 08 LaTeX学习系列之---Latex 的中文操作

    目录 目录: (一)方法一:导入 ctex 宏包 1.说明: 2.源代码: 3.效果展示: (二)使用ctex的文档类 1.说明: 2.源代码: 3.显示效果: (三)查看帮助 1.Ctex的使用手册 ...