通过 gradle 运行测试时“未找到测试”

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

我在尝试使用 gradle 运行测试时收到“未找到给定包含的测试:”错误。我创建了新的项目只是为了掌握 Cucumber/Junit,但我不明白为什么我无法实际运行它。 这是我的黄瓜跑步者课程:

package features.selenium.runner;

import io.cucumber.junit.CucumberOptions;
import io.cucumber.junit.platform.engine.Cucumber;

@Cucumber
@CucumberOptions(features = "src/test/resources/features",
        glue = "features.selenium.stepdefinition"
)
public class CucumberRunner {}

这是我的第一个简单测试:

package features.selenium.stepdefinition;

import static org.assertj.core.api.Assertions.assertThat;

import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;

public class SimpleTest {

  @When("Test")
  public void passOn() {
    assertThat("test").isEqualTo("test");
    System.out.println("TEST");
  }

  @Then("First simple test with Cucumber")
  public void passMe() {
    assertThat("test").isEqualTo("test");
    System.out.println("TEST");
  }
}

这是我的 build.gradle 文件:

plugins {
    id "io.freefair.lombok" version "6.5.0.3"
    id 'java'
    id 'application'
}

group 'org.example'
version '1.0-SNAPSHOT'
java.sourceCompatibility = JavaVersion.VERSION_17
java.targetCompatibility = JavaVersion.VERSION_17

repositories {
    mavenCentral()
}

dependencies {

    //Http client library
    implementation 'org.apache.httpcomponents:httpclient:4.5.14'

    //Jackson utility library to parse POJO to JSON
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.2'

    //Selenium Framework Library
    implementation group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '4.8.1'

    //Library for random string generation in TestEventDataInitializer.java
    implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.0'

    // Testing frameworks and libraries
    implementation 'org.junit.jupiter:junit-jupiter:5.8.1'
    testImplementation platform('org.junit:junit-bom:5.9.1')

    implementation 'org.junit.platform:junit-platform-suite-api:1.8.0-M1'

    testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1'
    testImplementation "org.junit.jupiter:junit-jupiter-engine:5.7.0"
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.0'
    testImplementation 'org.assertj:assertj-core:3.23.1'

    // Cucumber
    testImplementation 'io.cucumber:cucumber-java:6.10.4'
    testImplementation 'io.cucumber:cucumber-junit:6.10.4'
    testImplementation 'io.cucumber:cucumber-picocontainer:6.10.4'
    testImplementation 'io.cucumber:cucumber-junit-platform-engine:6.10.4'

    // Logging libraries
    testImplementation 'org.codehaus.janino:janino:3.1.9'
    implementation 'org.codehaus.janino:janino:3.1.9'

    testImplementation 'ch.qos.logback:logback-classic:1.4.5'
    implementation 'ch.qos.logback:logback-classic:1.4.5'

    testImplementation 'ch.qos.logback:logback-core:1.4.5'
    implementation 'ch.qos.logback:logback-core:1.4.5'

    // General purpose libraries
    implementation 'io.vavr:vavr:1.0.0-alpha-4'

    //CSV files handler
    implementation 'com.opencsv:opencsv:5.7.1'

    // https://mvnrepository.com/artifact/io.qameta.allure/allure-testng
    implementation group: 'io.qameta.allure', name: 'allure-testng', version: '2.23.0'

}
wrapper {
    gradleVersion = "7.6"
}


test {
    useJUnitPlatform()
}

我尝试更改运行和构建配置以使用 IDE 而不是 intellij 中的 gradle,测试工作正常,但由于某种原因无法弄清楚为什么它在使用 gradle 时不起作用。也许我的依赖项中缺少一些东西?我已经看过一些类似的问题,但没有一个答案有效。

selenium-webdriver gradle testing cucumber junit5
1个回答
0
投票

发生这种情况的原因有多种,包括配置错误或包结构不正确。在您的情况下,Gradle 似乎没有正确拾取 Cucumber 测试。

以下是排查和解决此问题的一些步骤:

  1. 检查包结构:确保您的 Cucumber 步骤定义类和运行器类位于正确的包结构中。根据您提供的代码,您的步骤定义类 SimpleTest 位于包 features.selenium.stepdefinition 中,您的运行器类 CucumberRunner 位于包 features.selenium.runner 中。仔细检查该结构是否符合您的实际项目结构。

  2. CucumberOptions 注解:在您的 CucumberRunner 类中,您正在使用 @Cucumber 注释。确保正确导入此注释。它应该从 io.cucumber.junit.platform.engine.Cucumber 导入。确保没有拼写错误或导入问题。

  3. 测试任务配置:在您的 build.gradle 文件中,测试任务已配置为通过 useJUnitPlatform() 使用 JUnit 5。这是运行 JUnit 5 测试(包括 Cucumber 测试)的正确配置。确认您没有意外修改此配置。

  4. Cucumber 功能文件位置:确保您的 Cucumber 功能文件位于 CucumberRunner 类的 @CucumberOptions 注释中指定的目录中。在您的情况下,您已指定 src/test/resources/features。检查此路径相对于您项目的根目录是否正确,并且您的功能文件具有 .feature 扩展名。

  5. Gradle 清理和重建:有时,Gradle 构建可能会进入无法正确获取更改的状态。尝试使用以下命令运行干净的构建:

    ./gradlew 清洁 ./gradlew 构建

  6. Gradle 测试任务:确保您使用正确的 Gradle 命令来运行测试。您可以使用以下命令运行测试:

    ./gradlew 测试

  7. 检查特定于 IDE 的配置:如果您的测试在从 IDE 运行而不是从 Gradle 运行时有效,请检查是否存在任何可能影响测试执行的特定于 IDE 的配置或插件。有时,IDE 有自己的测试运行器,其工作方式与 Gradle 不同。

  8. 更新 Cucumber 依赖项:确保您的 Cucumber 依赖项是最新的。您可以在 Cucumber 官网或存储库上查看最新版本。

  9. 检查测试命名约定: 确保您的测试方法遵循 Cucumber 命名约定。 Cucumber 依赖命名约定将功能文件中的步骤映射到步骤定义方法。

  10. 您可以添加一些日志记录语句或使用 Gradle 的调试选项来获取有关 Gradle 在运行测试时正在执行的操作的更多信息。例如,您可以在 Cucumber runner 类中添加 println 语句。

完成这些步骤后,您应该能够识别导致“未找到给定包含的测试”错误的问题。如果问题仍然存在,请提供有关您的项目结构的其他信息,我可以进一步提供帮助。

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