TestMe:

Diffblue:

Squaretest:

randoop

官方手册

工作方式

使用反馈导向的随机测试生成来生成单元测试。用伪随机的方式为被测类生成方法/构造函数调用序列。Randoop 执行它创建的序列,使用执行结果创建捕获程序行为的断言。Randoop 根据代码序列和断言生成测试。
测试生成+测试执行

作用

1、检测bug
2、回归测试

用法

1、检测到缺陷,修复缺陷直到没有发现错误
2、将测试用例归档为回归测试
3、程序改动,执行回归测试
4、测试用例执行失败,最小化测试集,排查问题

  • 存在缺陷,修复缺陷
  • 测试用例不够健壮(新旧值不一致,但是差异的产生是正常的),可以忽略此测试用例

排查完问题,如果有新增的测试代码或者有忽略的用例,需要重新运行 randoop 更新回归测试集

使用方式

安装

环境:Java 8 或 Java 11
下载并解压缩文件 randoop-4.3.1.zip

  • 是否需要配置环境变量?

${RANDOOP_PATH} 解压缩存档的路径,${RANDOOP_JAR} 解压缩存档中 randoop-all-4.3.1.jar 的位置

运行

通过调用主类来运行

  1. java randoop.main.Main command args...

commands
gentests 生成单测

  1. java -Xmx3000m -classpath myclasspath :${RANDOOP_JAR} randoop.main.Main gentests --testclass=java.util.TreeSet --output-limit=100

minimize 最小化失败的测试集

  1. java -cp ${RANDOOP_JAR} randoop.main.Main minimize --suitepath=ErrorTest0.java --suiteclasspath=myclasspath

help 打印用法信息

  1. java -classpath ${RANDOOP_JAR} randoop.main.Main help
  2. java -classpath ${RANDOOP_JAR} randoop.main.Main help gentests
  3. java -classpath ${RANDOOP_JAR} randoop.main.Main help minimize

evosuite:

https://www.evosuite.org/

用法
覆盖率
扩展

对比

Wings:C++ 单测生成