未找到测试 - 在裸机 Spring Boot Maven 项目上运行 jUnit 5 测试用例时出现空测试套件

问题描述 投票:0回答:11

所以我们收到了消息

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)
,但无济于事。

我已经用谷歌搜索过,大多数结果/SackOverflow 答案似乎来自 2016/2017 年,重点关注旧版本的 IntelliJ,该版本与 Junit 5 存在问题,这似乎不相关。

请问有什么建议吗? 如果我们花太多时间在上面,就会被迫恢复到 4,我非常不希望这样做:)

java maven spring-boot junit5
11个回答
30
投票

就我而言,我有一个

private
测试方法 - 它应该是
public


21
投票

因此,适用于 Junit 5 和 Spring Boot 2 的是以下 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)需要检测和执行测试!


15
投票

将我的添加到“愚蠢”错误列表中:我导入了错误的

@Test
注释。 Junit5 只会考虑用
org.junit.jupiter.api.Test
注释的方法,而不是
org.junit.Test


7
投票

什么对我有用。

请勿使用自己添加的版本

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>

5
投票

我很确定这是因为 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


2
投票

转到:文件 -> 项目设置 -> 模块并添加以下依赖项。

add dependency

添加'com.github.database-rider:rider-junit5:1.2.5'

enter image description here

'com.github.database-rider:rider-junit5:1.2.5'将使测试找到并运行。


1
投票

既然你使用的是Intellij。您是否将您的

java test folder
标记为
Test Sources Root

示例:

enter image description here


0
投票

使用 IntelliJ,我必须删除目标文件夹并运行测试才能消除此错误


0
投票

我知道这是一个老问题,但也许它对某人有帮助。 我收到错误消息是因为我从声明该方法的临时文件中复制粘贴了一个方法

static


0
投票

如果您在接口或抽象类中编写测试,例如

public interface FooTests() {

  @Test
  default void fooTest() {
    ...
  }
}

然后由“真正的”测试人员类实现,

public class Tester() implements FooTests, BarTests {
  ...
}

然后可能发生的情况是,您第一次单独运行其中一个测试,导致 IntelliJ 此后将其运行配置记住为

FooTests::fooTest
,而实际上它需要是
Tester::fooTest
。您可以通过修改测试的运行配置来覆盖它,例如

enter image description here

您想要将 Method: 类替换为非接口、非抽象测试运行器类。


0
投票

好吧,这对我来说是一场噩梦。终于解决了。

最初我有一个依赖:

<dependency>
    <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-suite-api</artifactId>
    <scope>test</scope>
</dependency>

然后我在文档中注意到:https://junit.org/junit5/docs/5.11.1/api/org.junit.platform.suite.api/org/junit/platform/suite/api/package-summary .html

测试套件可以通过 @Suite 和 junit-platform-suite-engine 在 JUnit 5 环境中的 JUnit 平台上运行。

我将上面的依赖项替换为

<dependency>
    <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-suite-engine</artifactId>
    <scope>test</scope>
</dependency>
© www.soinside.com 2019 - 2024. All rights reserved.