我的目标是为我们正在迁移到新平台的大量遗留代码生成非常基本的单元测试。(我知道单元测试在这种情况下没有用处,但有时也会发生)。我们只是因为覆盖百分比而被阻止,所以在我们需要的方法中进行基本测试是很好的,所以使用自动生成的测试将是最有效的策略。
我找到了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文件夹中。
发布于 2020-01-11 08:32:33
您的屏幕截图没有显示系统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如果它正常工作,问题是PATH中的默认java.exe来自JRE而不是JDK。
请注意,-classpath参数指向包含.class文件的jars或目录,而不是指向单个.class文件。See the documentation。
如果您的ClassName.class文件是C:\randoop-4.2.1\bin格式的,则上面的命令应该有效。
用于JDK PATH配置的See the related answer。
https://stackoverflow.com/questions/59690071
复制相似问题