在寻求解决this以及某种方式that的过程中,我试图创建包以细分main
和test
类,然后使用编译器添加了执行单元测试的模块。不是很好的方式,但现在只是一个假设的结构。
随着我的进一步发展,几个未解决的问题是: -
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
"9" (build 9+181)
2017.2.5
问。什么可能是这种警告的原因?此外,我无法在项目中和项目类之外找到API.Status
。
答案 0 :(得分: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'
}
但总的来说,依赖是独立于构建工具的,所以你可以在没有 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 强制。
供参考,参见: