【问题标题】:warning: unknown enum constant Status.STABLE警告:未知枚举常量 Status.STABLE
【发布时间】:2018-03-23 23:00:00
【问题描述】:

为了解决this 和不知何故that,我试图创建包来细分maintest 类,然后使用带有添加模块的编译器来执行单元测试.不是一个很好的同意方式,目前只是一个假设的结构。

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

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

问。请注意,它会将opentest4j-1.0.0.jar 带到 lib/ 文件夹中。为什么会这样,另外一个罐子是干什么用的?

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

  • 使用命令编译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 注释掉代码并执行相同的命令,一切似乎都正常。

Libraries/Tools 如果这可能很重要:-

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

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

【问题讨论】:

  • 对不起,我删除了我的评论,因为我没有使用 intelliJ 进行测试,这就是你要问的。我也无法在任何地方找到 org.apiguardian 包,所以我的猜测是它与 intelliJ 有关。
  • @Sormuras 感谢您的链接。虽然这可能会回答org.apiguardian.api,但仍然不清楚为什么将 junit-jupiter 包含到类路径中会带来opentest4j-1.0.0.jar
  • "JUnit Jupiter API" 依赖于它。有关此额外项目/工件的目的,请参阅github.com/ota4j-team/opentest4j
  • @Sormuras 对this 有任何想法吗?

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


【解决方案1】:

编译警告可以简单地忽略。此外,从版本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 强制进行依赖。

参考另见:

【讨论】:

    【解决方案2】:

    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'
    }
    

    但总的来说,依赖是独立于构建工具的,因此您可以在没有 GradleMaven 的普通 IDE 中完成。

    【讨论】:

    • 传递依赖.. 但junit-platform-commons 也是如此,没有带上。我有什么问题吗?
    • 您正在通过 IntelliJ 添加依赖项 - 所以,IDE 可能不认为它很重要。
    • IDE 不认为它很重要 这是一个强有力的声明。有证据吗?
    • 只是猜测。因为传递依赖是明确的。
    猜你喜欢
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多