2017-10-12 335 views
8

在寻求解决this不知何故that,我尝试创建包细分maintest类,然后利用编译器与添加的模块来执行单元测试。不是一个很好的方式,但现在只是一个假设的结构。警告:未知的枚举常量Status.STABLE

enter image description here

一些开放的问题,因为我还继续有: -

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

Q.注意,它沿着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注释掉代码并执行相同的命令,事情似乎工作正常。

如果可能无关紧要使用的库/工具: -

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

问:什么可能是一个可能的原因是这样的 警告?此外,我无法在我的项目和项目类别之外找到API.Status

+2

对不起,我删除了我的意见,因为我没有用的IntelliJ测试,那就是你问关于。我也无法在任何地方找到'org.apiguardian'软件包,所以我的猜测是它与intelliJ有关。 –

+1

详情请参阅https://github.com/junit-team/junit5/issues/1065。 – Sormuras

+0

@Sormuras感谢您的链接。虽然这可能会回答'org.apiguardian.api',但它仍然不清楚为什么包括junit-jupiter到classpath带来'opentest4j-1.0.0.jar'? – nullpointer

回答

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

例如在摇篮,你可以通过做:

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

但总体而言,依赖的是建立工具无关,这样你就可以做到这一点在普通IDE不摇篮,或Maven

+1

*传递依赖* ..但是'junit-platform-commons'也是如此,它并没有带来。我在那里弄错了什么? – nullpointer

+0

您正在通过* IntelliJ *添加依赖关系 - 因此,也许IDE并不认为它很重要。 –

+1

* IDE不认为它是重要的*这是一个强有力的声明。任何证明? – nullpointer

1

编译警告可以简单地忽略。此外,从5.1.0(目前正在开发)版本开始,它不会再出现。它在Release Notes所有解释:

在5.0.1中,所有文物被改变有一个可选,而不是在他们发表的Maven的POM的@API卫 JAR托管的依赖。然而,尽管Java编译器应该忽略缺少注释类型,很多用户都报告说,编译测试,而无需在通过javac发出警告的类路径的结果看起来是这样的@API卫 JAR:

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

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

仅供参考见: