@SelectPackages not working with Maven CLI



我运行mvn clean package,除套件测试外,所有其他测试都运行。我正在运行 Junit 4 和 5 测试 - @Rules测试运行,@RegisterExtension/@ExtendWith 测试也运行。不确定为什么套件无法运行 - 任何想法?

代码如下:

测试套件

@SelectPackages("com.company.platform.test.suite")
@IncludeClassNamePatterns({"^.*Suite$"})
public class SuiteTest {
}

SuiteTest调用的测试

import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
public class TestingSuite {
    @Test
    public void add_2_plus_1(){
        Assertions.assertThat(2 + 1).isEqualTo(3);
    }
}

聚 甲醛

        <junit-jupiter-engine.version>5.5.0</junit-jupiter-engine.version>
        <junit-platform-runner.version>1.5.0</junit-platform-runner.version>
        <!-- ellided -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>${junit-jupiter-engine.version}</version>
        </dependency>
        <dependency>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
            <version>${junit-jupiter-engine.version}</version>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-runner</artifactId>
            <version>${junit-platform-runner.version}</version>
        </dependency>
      <!-- ellided -->
      <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                 <version>2.22.1</version>
                <configuration>
                    <includes>
                        <include>**/*Test.java</include>
                    </includes>
                </configuration>
            </plugin>

Maven、Java 和 OS 详细信息

mvn11 --version                                                                                                                                                                                                                          Sun Jul 21 14:43:24 EDT 2019
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T14:33:14-04:00)
Maven home: /usr/local/Cellar/maven/3.5.4/libexec
Java version: 11.0.1, vendor: Oracle Corporation, runtime: /Users/me/Downloads/jdk-11.0.1.jdk/Contents/Home
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.5", arch: "x86_64", family: "mac"

所以我复制了你的问题。运行时

mvn clean test

我得到了以下输出(以及许多其他输出(:

Juli 23, 2019 8:17:30 VORM. org.junit.vintage.engine.discovery.DefensiveAllDefaultPossibilitiesBuilder$DefensiveAnnotatedBuilder buildRunner
WARNING: Ignoring test class using JUnitPlatform runner: com.example.project.SuiteTest

这就是为什么我查找了DefensiveAllDefaultPossibilitiesBuilder$DefensiveAnnotatedBuilder代码并发现了以下注释:

/**
 * Customization of {@link AnnotatedBuilder} that ignores classes annotated
 * with {@code @RunWith(JUnitPlatform.class)} to avoid infinite recursion.
 */
private static class DefensiveAnnotatedBuilder extends AnnotatedBuilder {...}

这强烈建议使用@RunWith(JUnitPlatform.class)的套件在通过平台机制运行时被忽略。您可能会问 junit 5 团队是否有明确的方法来关闭该安全机制,但我想没有。

我建议你扩展maven-surefire-plugin的配置,以模仿你在套件中所做的:

@SelectPackages("com.company.platform.test.suite")
@IncludeClassNamePatterns({"^.*Suite$"})

可以翻译成类似的东西

<include>com.company.platform.test.suite/*Suite.java</include>

不过我没有测试它。

最新更新