我的目标是为要迁移到新平台的许多旧代码生成非常基本的单元测试。 (我知道单元测试不能用这种方法,但是有时会发生)。我们只限于覆盖百分比,因此最好采用我们需要的方法进行基本测试,因此进行自动生成的测试将是最有效的策略。

我找到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的文本文件,我不明白为什么这些家伙从未谈论过。我没有

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

java - java.lang.IllegalStateException尝试使用randoop生成单元测试-LMLPHP

编辑

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

最佳答案

您的屏幕截图没有显示System PATH环境变量。

仔细检查实际的PATH。它可能指向JRE而不是JDK,并且系统PATH的优先级高于用户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参数指向具有.class文件的jar或目录,而不指向单个.class文件。 See the documentation

如果您的ClassName.class文件位于C:\randoop-4.2.1\bin中,则上述命令应该可以使用。

See the related answer用于JDK PATH配置。

09-11 11:26