所以我们收到了消息
Process finished with exit code 0
Empty test suite.
当尝试在我们的多模块项目上运行Junit5测试用例时,为了测试问题的根源,我决定从头开始尝试一个新项目(我正在使用IntelliJ IDEA 2018.2.4)。
以下简单的项目POM文件出现了相同的问题:
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.org.bu.dep.app</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.0.5.RELEASE</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>com.vaadin.external.google</groupId>
<artifactId>android-json</artifactId>
</exclusion>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我尝试使用/不使用junit-vintage-engine同样的结果。
以下是测试类:
package com.org.bu.dep.app.demo;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class DemoApplicationTests {
@Test
public void contextLoads() {
Assertions.assertTrue(true);
}
}
在“运行”窗口中,显示No tests were found
。
我尝试了多种变体,例如带/不带@SpringBootTest
注释,也尝试了@ExtendWith(SpringExtension.class)
,但无济于事。
我已经在Google上搜索了,大多数结果/ SackOverflow答案似乎来自2016/2017年,重点是较老版本的IntelliJ,该版本与Junit 5存在问题,似乎无关。
请问有什么建议吗? 如果我们花太多时间将其恢复为4,我非常不希望这样做:)
答案 0 :(得分:3)
我非常确定这是因为Spring Boot 2没有使用JUnit 5所需的Maven Surefire插件版本。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
在2.22.0中添加了对JUnit5的支持,请参见https://issues.apache.org/jira/browse/SUREFIRE-1330
答案 1 :(得分:3)
因此,对于具有Spring Boot 2的Junit 5起作用的是以下3种方式:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
使用空项目进行测试和验证。
请注意,@ Michael Legart's答案建议添加
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
Maven测试(和Jenkins)需要检测和执行测试!
答案 2 :(得分:3)
对我有用的东西。
请勿自行添加junit-bom
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>5.6.1</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
还带有maven-surefire-plugin
的版本不添加
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
</plugin>
</plugins>
</build>
答案 3 :(得分:1)
答案 4 :(得分:1)
转到:文件->项目设置->模块,然后添加以下依赖项。
添加' com.github.database-rider:rider-junit5:1.2.5 '
' com.github.database-rider:rider-junit5:1.2.5 '将使测试找到并运行。
答案 5 :(得分:1)
就我而言,我有一个private
测试方法-应该是public
。
答案 6 :(得分:0)
我知道这是一个老问题,但也许它对某人有帮助。
我收到错误消息是因为我从一个方法被声明为 static
的临时文件中复制粘贴了一个方法。
答案 7 :(得分:0)
如果您在接口或抽象类中编写测试,例如
public interface FooTests() {
@Test
default void fooTest() {
...
}
}
然后由“真正的”测试人员类实现,
public class Tester() implements FooTests, BarTests {
...
}
然后可能发生的情况是您第一次单独运行其中一个测试,导致 IntelliJ 将其运行配置记住为 FooTests::fooTest
,而实际上它需要为 Tester::fooTest
。您可以通过修改测试的运行配置来覆盖它,例如
您想用您的非接口、非抽象测试运行程序类替换 Method: 类。
答案 8 :(得分:-1)
使用 IntelliJ,我不得不删除目标文件夹并运行测试以消除此错误