警告:未知的枚举常量Status.STABLE

时间:2017-10-12 05:48:56

标签: java unit-testing java-9 junit5 intellij-idea2017

在寻求解决this以及某种方式that的过程中,我试图创建包以细分maintest类,然后使用编译器添加了执行单元测试的模块。不是很好的方式,但现在只是一个假设的结构。

enter image description here

随着我的进一步发展,几个未解决的问题是: -

  • 将基于JDK9的模块添加到项目中。
  • 使用IntelliJ的快捷方式将JUnit5添加到类路径中。 (lib文件夹)[junit-jupiter-api-5.0.0.jar]

问。请注意,它将opentest4j-1.0.0.jar带到lib /文件夹。为什么会这样,用于其他jar的是什么?

  • 添加类并相应地生成一些测试方法。

  • 使用命令编译sample project(仅用于绘制正在使用的目录结构的图片)

    javac --module-path lib -d "target" $(find src -name "*.java")
    

    结果警告为 -

warning: unknown enum constant Status.STABLE   
  reason: class file for org.apiguardian.api.API$Status not found 
warning: unknown enum constant Status.STABLE 
2 warnings

注意 : -

我发现junit-jupiter的使用是可疑的,因为如果我使用JUnit注释掉代码并执行相同的命令,那么事情似乎正常。

图书馆/工具 如果可能有用,请使用: -

  • junit-jupiter-api-5.0.0
  • Java版"9" (build 9+181)
  • IntelliJ 2017.2.5

问。什么可能是这种警告的原因?此外,我无法在项目中和项目类之外找到API.Status

2 个答案:

答案 0 :(得分:3)

1)opentest4j

opentest4jjunit-jupiter-api的传递依赖。请参阅依赖关系图:

+--- org.junit.jupiter:junit-jupiter-api:5.0.1
     +--- org.opentest4j:opentest4j:1.0.0
     \--- org.junit.platform:junit-platform-commons:1.0.1

2)未知的枚举常量Status.STABLE

您需要添加以下依赖项:apiguardian-api

例如,在 Gradle 中,您可以通过以下方式完成:

dependencies {
    testCompile 'org.junit.jupiter:junit-jupiter-api:5.0.1'
    testRuntime 'org.junit.jupiter:junit-jupiter-engine:5.0.1'
    testCompileOnly 'org.apiguardian:apiguardian-api:1.0.0'
}

但总的来说,依赖是独立于构建工具的,所以你可以在没有 Gradle Maven 的普通IDE中完成。

答案 1 :(得分:3)

编译警告可以简单地忽略。此外,它不再以版本5.1.0开头(目前正在开发中)。这一切都在Release Notes中解释:

  

在5.0.1中,所有工件都被更改为具有可选,而不是对已发布的Maven POM中 @API Guardian JAR的强制依赖。但是,尽管Java编译器应该忽略缺少的注释类型,但是很多用户报告说在类路径上没有 @API Guardian JAR的情况下编译测试会导致javac发出警告像这样:

warning: unknown enum constant Status.STABLE
reason: class file for org.apiguardian.api.API$Status not found
     

为避免混淆,JUnit团队决定再次依赖 @API Guardian JAR 强制

供参考,参见: