使用 Spring Boot 和 JUnit5 在 Intellij 中终止所有测试

Posted

技术标签:

【中文标题】使用 Spring Boot 和 JUnit5 在 Intellij 中终止所有测试【英文标题】:All tests get terminated in Intellij with Spring Boot and JUnit5 【发布时间】:2020-09-19 21:45:29 【问题描述】:

我试图在我的 Spring Boot 应用程序中使用 JUnit5 编写一个简单的测试,但我注意到我的所有测试都会立即终止。我下载了一些单元测试示例,它工作得很好,所以我不知道我的设置有什么问题。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringDemoApplication 

    public static void main(String[] args) 
        SpringApplication.run(SpringDemoApplication.class, args);
    



这是我终止的示例测试:

import org.junit.jupiter.api.Test;

class DemoClassTest 

    @Test
    void testOne() 

    

这是我的 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>SpringDemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>SpringDemo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>14</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.2.0</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.mockito/mockito-junit-jupiter -->
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-junit-jupiter</artifactId>
            <version>2.23.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Image from Intellij

【问题讨论】:

“被终止”是什么意思?您的测试中没有内容;它立即完成。 @chrylis-cautiouslyoptimistic- 无论测试方法的内容是什么,它都会以退出代码 -1 结束。 使用mvn testmvnw test(从根目录)运行它会发生什么 首先它说在我的环境中找不到 JAVA_HOME。修复此问题后,它说构建成功并且我运行了 0 次测试。 【参考方案1】:

您应该删除 junit-jupiter-enginemockito-junit-jupiter 依赖项,因为它已包含在 spring-boot-starter-test 中,这让 SpringBoot 为您处理依赖项之间的不兼容版本问题。

您可能还想删除 junit-vintage-engine 排除项以允许 Junit5 和 Junit4 测试执行

【讨论】:

以上是关于使用 Spring Boot 和 JUnit5 在 Intellij 中终止所有测试的主要内容,如果未能解决你的问题,请参考以下文章

我是不是需要使用 Kotlin Junit5 和 Spring Boot 将 Spring 注释复制到内部类?

使用 JUnit5+Spring Security 测试 Spring Boot 控制器

使用 spring boot gradle 插件无法使用依赖管理执行 junit5 测试

Spring Boot 集成 JUnit5,更优雅单元测试!

Spring Boot junit5 测试在本地工作(Windows)但不在 Jenkins(Linux)中

如何在 Junit5 / spring boot 中命令执行控制器测试类?