11

为了解决这个问题我试图创建包来细分maintest类,然后使用带有添加模块的编译器来执行单元测试。不是一个很好的同意方式,但现在只是一个假设的结构。

在此处输入图像描述

当我进一步进行时,很少有未解决的问题是:-

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

问:请注意,它会带入opentest4j-1.0.0.jarlib/ 文件夹。为什么会这样,另一个罐子是做什么用的?

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

  • 使用命令编译示例工程(分享只是为了画一张使用中的目录结构)

    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
  • 爪哇版"9" (build 9+181)
  • 智能2017.2.5

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

4

2 回答 2

4

编译警告可以简单地忽略。此外,它不会再从版本开始出现5.1.0(目前正在开发中)。发行说明中对此进行了全部说明:

在 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 。

参考另见:

于 2018-01-04T15:52:02.943 回答
3

1)opentest4j

opentest4j是 的传递依赖junit-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 中完成它。

于 2017-10-26T09:23:14.450 回答