Jun*_*une 7 eclipse gradle spring-boot buildship junit5
但这还没有开始。我在控制台中收到此错误,而不是测试结果。
java.lang.NoSuchMethodError: 'java.util.Set org.junit.platform.engine.TestDescriptor.getAncestors()'
at org.junit.platform.launcher.core.StackTracePruningEngineExecutionListener.getTestClassNames(StackTracePruningEngineExecutionListener.java:50)
at org.junit.platform.launcher.core.StackTracePruningEngineExecutionListener.executionFinished(StackTracePruningEngineExecutionListener.java:39)
at org.junit.platform.launcher.core.DelegatingEngineExecutionListener.executionFinished(DelegatingEngineExecutionListener.java:46)
at org.junit.platform.launcher.core.OutcomeDelayingEngineExecutionListener.reportEngineFailure(OutcomeDelayingEngineExecutionListener.java:83)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:203)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:94)
at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:52)
at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:70)
at org.eclipse.jdt.internal.junit5.runner.JUnit5TestReference.run(JUnit5TestReference.java:98)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:40)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:529)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:756)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:452)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索。人们说这似乎与 jupiter-api 版本有关。所以我添加了一些像这样的依赖项。但没有成功。
// build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.3'
id 'io.spring.dependency-management' version '1.1.3'
}
group = 'hello'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation('org.junit.jupiter:junit-jupiter-api:5.9.3') /// added version
testRuntimeOnly('org.junit.jupiter:junit-jupiter-engine:5.9.3') /// added version
}
tasks.named('test') {
useJUnitPlatform()
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过不同的方式。我在 Eclipse IDE 上添加了 Java 构建路径,但它也不起作用。
(右键单击我的项目>属性> Java构建路径
>模块路径(也已经尝试过类路径。)>添加库> JUnit
我没有看到关于 JUnit 错误的相同案例'java.util.Set org.junit.platform.engine.TestDescriptor.getAncestors()'。
所以我现在很困惑。请帮忙。
这似乎是 Eclipse Buildship 的问题,JUnit 低于 5.10.0 和 Eclipse 2023-09 (4.29),我在这里报告:
Eclipse Buildship 问题 #1265:在 Eclipse 2023-09 (4.29) 中运行 JUnit 5.9.3 测试时出现 NoSuchMethodError
解决方法:
build.gradle,添加依赖项testImplementation 'org.junit.platform:junit-platform-launcher:1.9.3'或testImplementation 'org.junit.jupiter:junit-jupiter:5.10.0'build.gradle原因:
看来Buildship并没有选择相应的版本junit-platform-launcher(就像m2e似乎所做的那样;至少这个问题不能用Maven重现),而是使用junit-platform-launcherEclipse附带的版本。并且在Eclipse 4.29中junit-platform-launcher已经升级到1.10.0。但是JUnit 5.9.3中引入了哪些org.junit.platform:junit-platform-launcher:1.10.0调用,而 JUnit 5.9.3 中缺少哪些调用。org.junit.platform.engine.TestDescriptor.html::getAncestorsorg.junit.platform:junit-platform-engine:1.10.0org.junit.platform:junit-platform-engine:1.9.3
我认为这只是关于 Eclipse 2023-09 和 Junit 兼容性。@howlger 询问了最少的例子来确认,所以这就是它。我已经使用标准源布局创建了新的 gradle 项目(包装器,版本 8.1.1)。
构建.gradle
apply plugin: 'java'
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
repositories {
mavenCentral()
}
compileJava {
options.encoding = "UTF-8"
}
compileTestJava {
options.encoding = "UTF-8"
}
dependencies {
testImplementation("org.junit.jupiter:junit-jupiter:5.9.3")
testImplementation("org.junit.vintage:junit-vintage-engine:5.9.3")
}
Run Code Online (Sandbox Code Playgroud)
设置.gradle
rootProject.name = 'JunitBug'
Run Code Online (Sandbox Code Playgroud)
存根测试.java
package com.junitbug;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
class StubTest {
@Test
void test() {
boolean b = true;
assertTrue(b);
}
}
Run Code Online (Sandbox Code Playgroud)
在 Eclipse 中测试运行后,我遇到了同样的异常:
java.lang.NoSuchMethodError: 'java.util.Set org.junit.platform.engine.TestDescriptor.getAncestors()'
at org.junit.platform.launcher.core.StackTracePruningEngineExecutionListener.getTestClassNames(StackTracePruningEngineExecutionListener.java:50)
at org.junit.platform.launcher.core.StackTracePruningEngineExecutionListener.executionFinished(StackTracePruningEngineExecutionListener.java:39)
at org.junit.platform.launcher.core.DelegatingEngineExecutionListener.executionFinished(DelegatingEngineExecutionListener.java:46)
at org.junit.platform.launcher.core.OutcomeDelayingEngineExecutionListener.reportEngineFailure(OutcomeDelayingEngineExecutionListener.java:83)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:203)
....
Run Code Online (Sandbox Code Playgroud)
在 build.gradle 中将junit 版本更新到5.10.0修复了该问题。请注意,“gradlew test”在这两种情况下都可以正常工作。
| 归档时间: |
|
| 查看次数: |
2106 次 |
| 最近记录: |