使用 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 test
或mvnw test
(从根目录)运行它会发生什么
首先它说在我的环境中找不到 JAVA_HOME。修复此问题后,它说构建成功并且我运行了 0 次测试。
【参考方案1】:
您应该删除 junit-jupiter-engine
和 mockito-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,更优雅单元测试!