【问题标题】:Running simple Tests in Spring Tool Suite fails在 Spring Tool Suite 中运行简单测试失败
【发布时间】:2021-04-06 12:04:20
【问题描述】:

我现在正在做一个 Spring 教程,所以我对框架的了解不多。 无论如何,我已经无法测试第一个程序。我正在使用 Eclipse Spring Boot Tools,我想使用 JUnit Tests 或 Gradle Test 运行我的测试类。

运行它抛出的 JUnit 测试:

java.lang.NoClassDefFoundError: org/junit/platform/commons/util/ClassNamePatternFilterUtils
    at org.junit.platform.launcher.core.LauncherFactory.loadAndFilterTestExecutionListeners(LauncherFactory.java:122)
    at org.junit.platform.launcher.core.LauncherFactory.create(LauncherFactory.java:108)
    at org.junit.platform.launcher.core.LauncherFactory.create(LauncherFactory.java:75)
    at org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader.<init>(JUnit5TestLoader.java:34)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:64)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
    at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:128)
    at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:350)
    at java.base/java.lang.Class.newInstance(Class.java:645)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createRawTestLoader(RemoteTestRunner.java:371)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createLoader(RemoteTestRunner.java:366)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:310)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.init(RemoteTestRunner.java:225)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
Caused by: java.lang.ClassNotFoundException: org.junit.platform.commons.util.ClassNamePatternFilterUtils
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:606)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    ... 16 more

我的 gradle 配置如下:

buildscript {
    ext {
        springBootVersion = '2.3.4.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

sourceCompatibility = 11

repositories {
    mavenCentral()
}

dependencies {
    implementation( 
            'org.springframework.boot:spring-boot-starter',
            'javax.xml.bind:jaxb-api:2.3.0'
    )
    testImplementation(
            'org.springframework.boot:spring-boot-starter-test'
    )
}

ServiceTest.java

package de.evaspringbuch.eva02hellogibberV1;

import static org.assertj.core.api.Assertions.assertThat;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import de.evaspringbuch.eva02hellogibberV1.boundary.HelloController;

@SpringBootTest //(classes = Eva02HelloGibberV1.class)
public class ServiceTest {

    @Autowired
    private HelloController helloController;

    @Test
    public void testSayHello() {
        //assertThat(helloController.helloMessage("hello")).isEqualTo("hello");
        assertThat(helloController.helloMessage("hello")).isEqualTo(" na sowas :: hello");
    }
}

HelloController.java:

package de.evaspringbuch.eva02hellogibberV1.boundary;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import de.evaspringbuch.eva02hellogibberV1.service.HelloService;

@Component
public class HelloController {

    @Autowired
    private HelloService helloService;

    public String helloMessage(String message) {
        return helloService.setMyMessage(" na sowas :: " + message);
    }
}

Eva02HelloGibberV1.jaba

package de.evaspringbuch.eva02hellogibberV1;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

import de.evaspringbuch.eva02hellogibberV1.boundary.HelloController;

@SpringBootApplication
public class Eva02HelloGibberV1 {

    private static final Logger LOGGER = LoggerFactory.getLogger(Eva02HelloGibberV1.class);
    @Autowired
    private HelloController helloController;

    public static void main(String[] args) {
        SpringApplication.run(Eva02HelloGibberV1.class);
    }

  @Bean
  CommandLineRunner init() {
      return (evt) -> {
          LOGGER.debug(helloController.helloMessage("hallo"));
          LOGGER.debug(helloController.helloMessage("nochmal hallo"));
      };
  }
}

【问题讨论】:

    标签: java spring spring-boot gradle


    【解决方案1】:

    从异常和你的设置来看,你可能需要添加这个依赖,这不是spring-boot-starter-test的一部分:

    testRuntimeOnly 'org.junit.platform:junit-platform-commons:1.7.1'
    

    【讨论】:

    • 哇,它成功了。我以前使用过,但不幸的是忘记刷新 gradle 项目。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2011-09-02
    • 2013-12-01
    • 1970-01-01
    • 2013-11-12
    • 2022-08-17
    • 2015-01-03
    相关资源
    最近更新 更多