首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用randoop生成单元测试的java.lang.IllegalStateException

尝试使用randoop生成单元测试的java.lang.IllegalStateException
EN

Stack Overflow用户
提问于 2020-01-11 07:02:39
回答 1查看 327关注 0票数 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

问题所在

简单地说,当我运行这个命令时,问题是下面的错误

代码语言:javascript
复制
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文件夹,所以我随意创建了它。我不知道这是对还是错,但我只是这么做了。

在一开始,视频运行以下命令,这是非常基本的,它在我的系统上运行正常。

代码语言:javascript
复制
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文件夹中。

EN

回答 1

Stack Overflow用户

发布于 2020-01-11 08:32:33

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

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

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

尝试运行:

代码语言:javascript
复制
"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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59690071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档