1

我的目标是为我们正在迁移到新平台的大量遗留代码生成非常基本的单元测试。(我知道单元测试以这种方式没有用,但有时会发生)。我们只是因为覆盖百分比而被阻止,所以最好在我们需要的方法中使用基本测试,所以使用自动生成的测试将是最有效的策略。

我找到了 RANDOOP https://randoop.github.io/randoop/并开始尝试让它工作。但是我发现了一个问题,部分原因是我对 java 的了解几乎为零(我在 .net 中做了类似的事情,只需点击几下,不到 4 小时)。

我在这里关注官方手册https://randoop.github.io/randoop/manual/index.html#getting_randoop和这个人的视频,他只是让它工作https://www.youtube.com/watch?v =nPdb-72-EJY

问题

简单来说,问题是我运行此命令时出现以下错误

java -classpath 'C:\randoop-4.2.1\bin;C:\randoop-4.2.1\randoop-all-4.2.1.jar' randoop.main.Main gentests --testclass=ClassName

> Throwable thrown while handling command:
> java.lang.IllegalStateException: Cannot find the Java compiler. Check
> that classpath includes tools.jar java.lang.IllegalStateException:
> Cannot find the Java compiler. Check that classpath includes tools.jar
>         at randoop.compile.SequenceCompiler.<init>(SequenceCompiler.java:64)
>         at randoop.compile.SequenceCompiler.<init>(SequenceCompiler.java:48)
>         at randoop.condition.SpecificationCollection.<init>(SpecificationCollection.java:82)
>         at randoop.condition.SpecificationCollection.create(SpecificationCollection.java:102)
>         at randoop.main.GenTests.handle(GenTests.java:279)
>         at randoop.main.Main.nonStaticMain(Main.java:66)
>         at randoop.main.Main.main(Main.java:30)
> 
> Randoop failed. No sequences generated.

上面这是什么?

我从放置在 randoop“安装”文件夹的 bin 文件夹中的控制台运行命令。

C:\randoop-4.2.1\bin 是我解压 Randoop 下载的文件夹。奇怪的是,Randoop 版本下载中没有一个包含 bin 文件夹,所以我随意创建了它。我不知道这是对还是错,但我就是这么做的。

一开始,视频运行以下命令,这非常基本,并且在我的系统上运行良好。

java -classpath .\randoop-4.2.1\randoop-all-4.2.1.jar randoop.main.Main help gentests 

还有一个名为 myclasslist 的文本文件,我不明白为什么这些人从不谈论。我没有。

我安装了 Java 8 c:\program files\jdk1.8.0_231,路径和环境变量是这样设置的。

环境变量

编辑

在视频中,这个家伙在 randoop 根文件夹中有 .java 文件。我没有,因为我在 intellij 有一个真正的项目。我刚刚找到了类文件并将其复制到 bin 文件夹中。

4

1 回答 1

0

您的屏幕截图未显示系统PATH环境变量。

仔细检查实际PATH。它可能指向 JRE 而不是 JDK,并且System PATH优先于User PATH

Randoop 需要JDK才能工作,而不是 JRE。

尝试运行:

"c:\program files\jdk1.8.0_231\bin\java.exe" -classpath 'C:\randoop-4.2.1\bin;C:\randoop-4.2.1\randoop-all-4.2.1.jar' randoop.main.Main gentests --testclass=ClassName

如果可行,则问题是java.exe您的默认值PATH来自 JRE 而不是来自 JDK。

请注意,-classpath参数指向 jar 或包含.class文件的目录,而不是单个.class文件。请参阅文档

如果您的ClassName.class文件位于C:\randoop-4.2.1\bin.

请参阅JDKPATH配置的相关答案。

于 2020-01-11T00:32:32.963 回答