使用maven命令运行测试时不会触发Junit监听器

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

我遇到了以下问题,我有使用 JUNIT Testign 框架的 Rest Assured API 测试,我添加了一个 TestExecutionListener 来打印有关已执行测试的详细信息。 然而,当我通过 Maven 命令运行测试时:

`mvn test -Duri=http://localhost:8000/api`

这个 TestExecutionListener 没有被触发。

当我通过按 IntelliJIDEA 上的“Play”按钮运行测试类时,会触发 TestExecutionListener。 当我使用 maven 命令再次运行它时,它也会被触发。

所以,问题仅在于第一次使用 maven 命令运行测试时,然后在本地运行后,一切都得到了修复,但这对我来说不是一个解决方案,因为我需要 第一次尝试 Maven 命令时要运行的所有内容,因为测试是作为 CI/CD Pipeline 的单独作业运行的。 我已经验证我的项目使用的是 JAVA 8,并且我的 JAVA HOME PATH 也指向 HJAVA8

不确定这是否有帮助,但会在此处添加我拥有的侦听器以及 org.junit.platform.launcher.TestExecutionListener 文件

org.junit.platform.launcher.TestExecutionListener:

utils.listeners.RunnerExtension
public class RunnerExtension implements TestExecutionListener {

    @Override
    public void testPlanExecutionStarted(TestPlan testPlan) {

        System.out.println("========STARTING============");
    }

    @Override
    public void testPlanExecutionFinished(TestPlan testPlan) {

        System.out.println("========FINISHING=============");
    }

我尝试使用 Maven 命令 mvn test -Duri=http://localhost:8000/api 运行测试,并期望 实现要触发的 TestExecutionListener 的 RunnerExtension。但它没有被触发。 仅当我直接通过 IntelliJ Idea 运行测试时才会触发它

附加信息: java版本 openjdk 版本“1.8.0_292” OpenJDK 运行时环境 (AdoptOpenJDK)(build 1.8.0_292-b10) OpenJDK 64 位服务器 VM (AdoptOpenJDK)(build 25.292-b10,混合模式)

mvn——版本 Apache Maven 3.9.6 (bc0240f3c744dd6b6ec2920b3cd08dcc295161ae) Maven主页:/usr/local/Cellar/maven/3.9.6/libexec Java 版本:1.8.0_292,供应商:AdoptOpenJDK,运行时:/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre 平台编码:UTF-8 操作系统名称:“mac os x”,版本:“10.16”,架构:“x86_64”,系列:“mac”

== 我还在两种情况下运行了 mvn test -X -Duri=http://localhost:8000/api` 当 TestExecutionListener 被触发和未被触发时,我没有注意到日志有任何差异,所以 ib 这两种情况都是使用相同的库,

== pom.xml文件如下;

...
   <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <restassured.version>4.0.0</restassured.version>
        <junit.version>5.7.2</junit.version>
        <junit.dataprovider.version>2.4</junit.dataprovider.version>
        <allure-maven.version>2.10.0</allure-maven.version>
        <allure-junit5.version>2.14.0</allure-junit5.version>
        <maven-surefire-plugin.version>3.0.0-M4</maven-surefire-plugin.version>
        <aspectj.version>1.9.6</aspectj.version>
        <allure.version>2.17.1</allure.version>
        <allure.cmd.download.url>
            https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline
        </allure.cmd.download.url>
        <wiremock.version>2.23.2</wiremock.version>
     </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
            </plugin>
    plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven-surefire-plugin.version}</version>
                <configuration>
                    <properties>
                        <configurationParameters>
                            junit.jupiter.conditions.deactivate = *
                            junit.jupiter.extensions.autodetection.enabled = true
                            junit.jupiter.testinstance.lifecycle.default = per_class
                        </configurationParameters>
                    </properties>
                       <systemPropertyVariables>
                        <allure.results.directory>target/allure-results</allure.results.directory>
                    </systemPropertyVariables>
                    <argLine>
                        -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
                    </argLine>
    </configuration>
                <dependencies>....
  <dependencies>
java maven junit listener
1个回答
0
投票

感谢 @Twaldigas 在相关主题下的评论,我找到了解决方案 JUnit 5:是否可以在 Maven Surefire 插件中设置 TestExecutionListener?

我使用了这个库: https://github.com/google/auto/tree/main/service (必须添加新的依赖项并更新 maven-compiler-plugin 的配置,无论如何,它在他们的文档中进行了描述)

然后我在实现 TestExecutionListener 的类中添加了注释 所以我的代码如下所示:

import org.junit.platform.launcher.TestExecutionListener;
import com.google.auto.service.AutoService;

@AutoService(TestExecutionListener.class)
public class RunnerExtension implements TestExecutionListener {

    @Override
    public void testPlanExecutionStarted(TestPlan testPlan) {

        System.out.println("========STARTING============");
    }

    @Override
    public void testPlanExecutionFinished(TestPlan testPlan) {

        System.out.println("========FINISHING=============");
    }

通过这种方法,文件 META-INF/services/org.junit.platform.launcher.TestExecutionListen

根本不需要!

© www.soinside.com 2019 - 2024. All rights reserved.