我最近已升级到JUnit 5,并且我尝试使用在几乎所有可以找到示例的地方提供的EXACT INSTRUCTIONS通过junit-jupiter-vintage维护JUnit 4套件。
注意,我使用的是脱机版本,因为我必须这样做,因此尽管可以下载所需的任何Jar,但我没有主动连接到任何Maven存储库。
Gradle版本为4.9,-all.zip发行,不打包 已安装但已解压缩并添加到PATH变量中(并不是一点也没关系)。
apply plugin: 'java'
repositories{
flatDir dirs: 'file:$rootDir/lib'
}
test{
useJUnitPlatform()
}
dependencies{
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.5.0'
testCompileOnly 'junit:junit:4.12'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.5.0'
testRuntimeOnly 'org.junit.vintage:junit-vintage-engine:5.5.1'
}
输出令人失望:
NoClassDefFoundError: org/junit/platform/engine/support/hierarchical/HierarchicalTestEngine
这些是在JUnit Platform jars中找到的文件,并用作JUnit 5的启动引擎。据说Gradle 4.6及更高版本本身支持该引擎,我可以在
中看到jars。gradle-4.9/lib/plugins/
...
junit-platform-commons-1.0.3.jar
junit-platform-engine-1.0.3.jar
junit-platform-launcher-1.0.3.jar
...
手动将最新平台添加为testRuntimeOnly依赖项似乎可以使我的JUnit 5测试文件正常工作,但是无法检测到我的任何JUnit4测试。这似乎也很明显,因为我可以找到的每个示例构建文件都不需要这样做。我希望,如果可以解决gradle问题,那么我也将解决JUnit4问题。
为什么我的(离线)gradle构建无法找到JUnit5的主要测试运行器?
答案 0 :(得分:0)
Gradle试图使用Maven存储库来解决传递依赖关系,并且由于此安装处于脱机状态,因此无法做到这一点。所有的JUnit传递依赖项都必须位于运行时类路径上,在这种情况下,这意味着手动包括它们。
我将使用Maven来解决这个问题,并将其全部下载到这台连接互联网的计算机上,并将其创建的本地存储库移到需要它的系统上。