尝试使用randoop生成单元测试时发生java.lang.IllegalStateException

尝试使用randoop生成单元测试时发生java.lang.IllegalStateException,java,unit-testing,intellij-idea,junit,randoop,Java,Unit Testing,Intellij Idea,Junit,Randoop,我的目标是为我们正在迁移到新平台的许多遗留代码生成非常基本的单元测试。(我知道单元测试在这种情况下是没有用的,但有时会发生)。我们只是因为覆盖率而被阻止,所以在我们需要的方法中使用基本测试是很好的,所以使用自动生成的测试将是最有效的策略 我找到了RANDOOP并开始尝试让它工作。然而,我发现了一个问题,部分原因是我对java几乎一无所知(我在.net中做了类似的事情,只需点击几下,不到4小时) 我遵循官方手册和这个家伙的视频,他只是让它工作 问题 当我运行这个命令时,问题是以下错误 java -

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

我找到了RANDOOP并开始尝试让它工作。然而,我发现了一个问题,部分原因是我对java几乎一无所知(我在.net中做了类似的事情,只需点击几下,不到4小时)

我遵循官方手册和这个家伙的视频,他只是让它工作

问题 当我运行这个命令时,问题是以下错误

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.
还有一个名为myclasslist的文本文件,我不明白为什么这些家伙从不谈论它。我没有

我在
c:\program files\jdk1.8.0\u 231
安装了Java 8,路径和环境变量设置如下

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

您的屏幕截图没有显示系统
路径
环境变量

仔细检查实际的
路径
。它可能指向JRE而不是JDK,系统
路径
优先于用户
路径

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
来自JRE,而不是来自JDK

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

如果您的
ClassName.class
文件位于
C:\randoop-4.2.1\bin
中,则上述命令应起作用


对于JDK
PATH
配置。

您的屏幕截图不会显示系统
PATH
环境变量

仔细检查实际的
路径
。它可能指向JRE而不是JDK,系统
路径
优先于用户
路径

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
来自JRE,而不是来自JDK

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

如果您的
ClassName.class
文件位于
C:\randoop-4.2.1\bin
中,则上述命令应起作用


对于JDK
PATH
配置。

您是否尝试在
-classpath
列表中添加
c:\program files\jdk1.8.0\u 231\lib\tools.jar
?我甚至不知道有一个类路径列表
java-classpath'c:\ProgramFiles\jdk1.8.0\u 231\lib\tools.jar;C:\randoop-4.2.1\bin;C:\randoop-4.2.1\randoop-all-4.2.1.jar'randoop.main.main gentests--testclass=ClassName
我这样做,与java-classpath'C:\randoop-4.2.1\bin稍有不同;C:\randoop-4.2.1\randoop-all-4.2.1.jar;C:\Program Files\Java\jdk1.8.0\u 231\lib\tools.jar'randoop.main.main gentests--testclass=ClassName'但仍然抛出相同的错误也更改了类路径项的顺序并将tools.jar放在第一位,但您是否尝试在
-classpath
列表中添加
C:\Program Files\jdk1.8.0\u 231\lib\tools.jar
,没有,我该怎么做?我甚至不知道有一个类路径列表
java-classpath'c:\ProgramFiles\jdk1.8.0\u 231\lib\tools.jar;C:\randoop-4.2.1\bin;C:\randoop-4.2.1\randoop-all-4.2.1.jar'randoop.main.main gentests--testclass=ClassName
我这样做,与java-classpath'C:\randoop-4.2.1\bin稍有不同;C:\randoop-4.2.1\randoop-all-4.2.1.jar;C:\Program Files\Java\jdk1.8.0\u 231\lib\tools.jar'randoop.main.main gentests--testclass=ClassName'但仍然抛出相同的错误也更改了类路径项的顺序并将tools.jar放在第一位,但错误相同