Randoop 报错 Cannot find the Java compiler 的解决方案

编写测试用例是一项困难且耗时的工作,但同时又是好的软件工程的重要部分。Randoop是一个随机测试的测试用例生成的工具,能够自动的为Java代码中的类生成单元测试。

官网链接: https://randoop.github.io/randoop/manual/index.html

正确的使用方法是在其 Release 页面下下载对应的 zip 压缩文件,然后解压。

Releases · randoop/randoop · GitHub

解压后我们得到程序主体,如下所示:

在很大程度上,我们只需要按照官方的教程去配置就可以了:

但是,并不是绝对正确适合每一台计算机,配置环境变量有时候会将问题变得麻烦,对于新手来说。

当我们按照规则来使用命令行(而不是插件)的时候,常常会遇到错误。

java -ea -classpath ".;randoop-all-4.3.2.jar;H:\MuJava\randoop-4.3.2\com\demopackage\Calculator.class" randoop.main.Main gentests --testclass=com.demopackage.Calculator

执行这条命令来在我的电脑上测试 Calculator 类文件,我将其放在 randoop 相同的目录下是为了便于测试。

我们会得到这样的错误:Cannot find the Java compiler. Check that classpath includes tools.jar.

意思是找不到依赖的 tools.jar 文件。

即使我们确认配置好了 classpath 环境变量下面的 tools.jar 文件路径。

随后我尝试了在该项目的 issues 里面的相同问题的讨论方案,然而都不是最好的解决方案。

最后,我自己找到了一个比较合适的解决方法:

将 %JAVA_HOME%\lib\tools.jar 文件复制到 %JAVA_HOME%\jre\lib\ 目录下。

也就是要在 Java 对应版本的(比如 Java 1.8,Randoop 好像仅实验性支持 1.9 及更高版本)

JDK 目录下找到 lib 子目录,只有 JDK 有编译环境 tool.jar 文件,而 Randoop 的最近几个版本似乎会默认读取 JRE 的目录,而 JRE 没有 tools.jar。配置环境变量似乎可以最终解决问题,但是比较麻烦。所以,考虑可以直接复制一份 tools.jar 到 JRE 目录的 lib 目录下。

复制 tools.jar 文件:

将文件粘贴到 JRE 的 lib 目录下:

随后再次跑 Randoop ,发现可以正常执行测试用例生成过程(需要等待几分钟):

然后在 class 的目录下就会生成 JUnit 测试用例:

Randoop 生成的测试用例代码(部分):

在变异测试中,可以利用 Randoop 的随机测试用例,并结合 MuJava 工具,来初步筛选掉可能的等价变异体,并保留非等价变异体(部分需要手工操作)。在非等价变异体的基础上构建变异分支,随后进行自己的研究。

【完】


本文发布于:2024.03.09,更新于:2024.03.09.

相关推荐
customer0830 分钟前
【开源免费】基于SpringBoot+Vue.JS租房管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源
小学鸡!32 分钟前
spring中使用@Validated,什么是JSR 303数据校验,spring boot中怎么使用数据校验
java·spring boot
??? Meggie33 分钟前
【Python】selenium 获取滑块和背景图在电脑屏幕的相对位置【解决滑块验证码问题】
开发语言·python·selenium
呼啦啦啦啦啦啦啦啦36 分钟前
【JVM】深入了解Java虚拟机-------内存划分、类加载机制、垃圾回收机制
java·jvm
顾北辰2036 分钟前
基本算法——聚类
java·spring boot·机器学习
是店小二呀37 分钟前
【仓颉语言基础】语言概念、环境配置与语法解析
开发语言·wpf
DARLING Zero two♡39 分钟前
【优选算法】Sliding-Chakra:滑动窗口的算法流(下)
java·数据结构·c++·算法·leetcode
冷面侠女2 小时前
Qt Creator项目构建配置说明
开发语言·qt
少年花朵2 小时前
Perl语言的软件工程
开发语言·后端·golang
sukalot2 小时前
windows C#-委托
开发语言·c#