有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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,路径和环境变量的设置如下

Environment variables

编辑

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


共 (1) 个答案

  1. # 1 楼答案

    您的屏幕截图没有显示系统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
    

    如果有效,问题是PATH中的默认java.exe来自JRE,而不是来自JDK

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

    如果ClassName.class文件位于C:\randoop-4.2.1\bin中,则上述命令应该有效

    See the related answer用于JDKPATH配置