JAVA试图用randoop生成单元测试的lang.IllegalStateException
我的目标是为我们正在迁移到新平台的许多遗留代码生成非常基本的单元测试。(我知道单元测试在这种情况下并不有用,但有时也会发生)。我们只是因为覆盖率而被屏蔽,所以我们最好使用我们需要的方法中的基本测试,所以使用自动生成的测试将是最有效的策略
我找到了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“installation”文件夹的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
安装了Java8,路径和环境变量的设置如下
编辑
在视频中,这家伙拥有。randoop根文件夹中的java文件。我没有,因为我在intellij有一个真正的项目。我刚刚找到了classs文件并将其复制到bin文件夹
# 1 楼答案
您的屏幕截图没有显示系统
PATH
环境变量仔细检查实际的
PATH
。它可能指向JRE而不是JDK,系统PATH
优先于用户PATH
Randoop需要JDK才能工作,而不是JRE
尝试跑步:
如果有效,问题是
PATH
中的默认java.exe
来自JRE,而不是来自JDK请注意,
-classpath
参数指向包含.class
文件的JAR或目录,而不是单个.class
文件See the documentation如果
ClassName.class
文件位于C:\randoop-4.2.1\bin
中,则上述命令应该有效See the related answer用于JDK
PATH
配置