1.Auto-Unit-Test-Case-Generator 【别称smart-ut】
1.1 介绍
一个 单元测试领域下用例的自动生成工具;
github源码网址:
1.2使用流程:环境配置 + 具体使用;
环境配置 :安装-->对被测试工程编译-->配置smartut.jar的setup环境;
具体使用 :生成测试用例(单个类/整个模块)【见 2.用例生成 】
1.2.1安装Auto-Unit-Test-Case-Generator:(即smart-ut)
在github网站下载对应smartut-master.jar包。
1.2.2 编译+安装依赖
对被测项目进行编译和install依赖:
注意输入命令的目录:主项目下【主pom.xml同级目录】 :
e.g.:
mvn clean compile
mvn clean install -Dmaven.test.skip=true(跳过测试的install)
mvn dependency:copy-dependencies
关于 mvn install + mvn dependency:copy-dependencies
作用:
下载所有依赖到本地仓库 + 复制这些依赖到 target/dependency;mvn dependency:copy-dependencies 命令会从 Maven 本地仓库中复制依赖项。
它的来源:Maven 本地仓库:位于 ~/.m2/repository 目录。
依赖文件通常会被复制到 target/dependency 目录下。
Maven 根据 pom.xml 文件中列出的<dependencies> 来确定需要复制的 JAR 文件。
1.2.3 测试工具的 setup设置(即路径配置)
java -jar ./smartut.jar -setup example/target/classes/ example/target/dependency/*.jar
该命令运行 smartut.jar 文件,并传递 -setup 参数和两个路径(一个是class文件的目录,另一个是依赖的目录)给应用程序。
- java -jar ./smartut.jar:
- 启动 Java 程序,运行 smartut.jar 文件。
- -setup:
- 传递给 smartut.jar 的参数;
- example/target/classes:
- 指定包含编译后的类文件的目录。应用程序可能需要这个路径来加载类;
- example/target/dependency/*.jar:
- 指向包含依赖 JAR 文件的路径。通配符 *.jar 表示所有 JAR 文件
2.用例生成
“Class级别用例生成”指的是为单个类生成测试用例,专注于该类的功能和行为。
“Module级别用例生成”指生成针对整个模块的测试用例。模块可以是一个包(package);
Q:什么是包?
包不是一个类文件,而是一个目录结构:
目录结构:在 Java 项目中,包通常对应于文件系统中的目录。例如,包
com.example
对应于目录com/example
。类文件:包中的类文件是
.class
文件,这些文件包含了编译后的 Java 类的字节码。一个包可以包含多个类文件。
(1)Class级别用例生成
如果你想指定一个特定的类作为程序入口:
java -jar ./smartut.jar -class com.alipay.test.example
【这个命令运行 SmartUt 工具来生成 demo.A 类的测试代码。
-class demo.A 指定了要生成测试的目标类】
- java -jar ./smartut.jar: 运行 smartut.jar; -jar 告诉 Java要运行一个 JAR 文件。
- -class com.alipay.test.example: 传递给 JAR 文件的参数。-class 是一个标志,com.alipay.test.example 是一个参数值,表示你希望 JAR 文件运行 com.alipay.test.example 这个类。
可能报错:【未找到target目标:No classpath has been defined for the target project】
解决:【用 -projectCP 选项来指定项目的类路径。】 or setup设置环境变量【即路径】
这个选项告诉 SmartUt 工具在哪里找到你的目标类
java -jar ../smartut-master-1.1.0.jar -class demo.A -projectCP /path/to/your/classe
#E.G.
java -jar ../smartut-master-1.1.0.jar -class demo.A -projectCP ./target/classes/
(2)Module级别用例生成
java -jar ../smartut-master-1.1.0.jar -target ./target/classes/
代码中的路径说明:
3.运行生成的测试用例
mvn test
可能出现部分函数/库 报错找不到的情况;
比如测试代码里的各种import[这里是 junit / smartut]相关的报错;
import static org.junit.Assert.*;
import demo.B;
import org.junit.Test;
import static org.junit.Assert.*;
import demo.C;
import org.junit.AfterClass;
import org.smartut.runtime.sandbox.Sandbox;
注意,要添加运行时依赖【可以理解为运行时需要的库/函数】[加在主pom.xml下]
3.1 Q: 什么是运行时依赖?
Maven 中的运行时依赖
在 Maven 中,可以通过
<scope>
标签来指定依赖的作用范围。常见的作用范围包括:
- compile:默认的依赖范围,表示该依赖既用于编译也用于运行。
- provided:表示该依赖在编译时需要,但在运行时由容器提供(例如 Servlet 容器提供的 JSP API)。
- runtime:表示该依赖在编译时不需要,但在运行时需要。
- test:表示该依赖仅用于测试,不在生产环境中使用。
e.g.:【pom.xml里的<dependency>下的<scope>】
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>runtime-library</artifactId>
<version>1.0.0</version>
<scope>runtime</scope>
</dependency>
</dependencies>
【下图是该项目的readme中的依赖添加部分】
完成这里就可以正常运行生成的test-case了。之后我会慢慢整理一些报错解决。
TODO:
各类报错及解决:
【9.27整理完 v1.0】 Maven项目常见各类 Q&A-CSDN博客
1.小tips1:
如果项目巨大,需要先在主项目pom.xml一级 mvn install; 【保证所有的依赖都安装到本地】
然后可对不测试的无关modules B,C,D注释掉,不对其生成,只生成你需要的模块A的test-case;
-【Q:既然全项目的install用时几个小时那么长,为什么不能注释掉无关模块再install + test呢?】
- A : 因为模块之间有依赖关系,A模块依赖于B,那么B模块的dependency没有install到本地,A模块的test-case就没法运行;