同时运行 JUnit 测试和 Selenium/Cucumber 测试时出现问题

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

我有一个基本的 Maven/Spring 测试项目,其中包含一些简单的 JUnit 测试和 Selenium/Cucumber 测试,稍后我想使用 Github Actions 运行它们,但首先我想确保它们在本地运行。

这是 JUnit“测试”:

package com.example.CucumberSelenium;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import static org.junit.jupiter.api.Assertions.assertTrue;

@SpringBootTest
public class GithubActionsTests {

    @Test
    public void test() {
        assertTrue(true);
    }
}

这是我的 Cucumber 测试运行程序文件:

package com.example.CucumberSelenium;

import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;

@RunWith(Cucumber.class)
@CucumberOptions(features = "src/test/java/com/example/CucumberSelenium/resources/features", glue = "com.example.CucumberSelenium.stepdefs")
public class CucumberTestRunnerTest {
}

这是我的 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>3.2.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>CucumberSelenium</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>CucumberSelenium</name>
    <description>testing</description>
    <properties>
        <java.version>21</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java</artifactId>
            <scope>test</scope>
            <version>7.11.2</version>
        </dependency>

        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-junit</artifactId>
            <version>7.11.2</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.17.0</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19.1</version>
                <configuration>
                    <includes>
                        <include>**/*Tests.java</include>
                        <include>**/*Test.java</include>
                        <include>**/GithubActionsTests.java</include>
                        <include>**/CucumberTestRunnerTest.java</include>
                    </includes>
                </configuration>
            </plugin>

        </plugins>
    </build>
</project>

这是我的文件结构:

这两个测试均由他们自己使用 IntelliJ 运行良好。但是当运行

mvn test
时,只有黄瓜测试正在运行。

maven-surefire-plugin
版本更改为 2.22.2 将反转结果,仅运行 JUnit 测试,而不运行 Cucumber 测试。所以我猜想该插件存在一些依赖性问题或问题,但我不知道是什么。请多多指教🙏

java spring selenium-webdriver junit cucumber
1个回答
0
投票

您正在使用引入 JUnit 5 的 Spring Boot 3.2。同时还使用依赖于 JUnit 4 的

cucumber-junit

Surefire 在 v2.22 左右引入了对 JUnit 5 的支持。但 Surefire 无法同时运行 JUnit 4 和 JUnit 5,因此当两者都可用时默认使用最新版本的 JUnit。

短期内,您可以通过添加

junit-vintage-engine

来解决此问题
<dependency>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
    <scope>test</scope>
</dependency>

从长远来看,最好停止完全依赖 JUnit 4 并切换到

cucumber-junit-platform-engine
。您可以在https://github.com/cucumber/cucumber-java-sculpture中找到一个工作示例(没有Spring)。

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