我在尝试使用 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 时不起作用。也许我的依赖项中缺少一些东西?我已经看过一些类似的问题,但没有一个答案有效。
发生这种情况的原因有多种,包括配置错误或包结构不正确。在您的情况下,Gradle 似乎没有正确拾取 Cucumber 测试。
以下是排查和解决此问题的一些步骤:
检查包结构:确保您的 Cucumber 步骤定义类和运行器类位于正确的包结构中。根据您提供的代码,您的步骤定义类 SimpleTest 位于包 features.selenium.stepdefinition 中,您的运行器类 CucumberRunner 位于包 features.selenium.runner 中。仔细检查该结构是否符合您的实际项目结构。
CucumberOptions 注解:在您的 CucumberRunner 类中,您正在使用 @Cucumber 注释。确保正确导入此注释。它应该从 io.cucumber.junit.platform.engine.Cucumber 导入。确保没有拼写错误或导入问题。
测试任务配置:在您的 build.gradle 文件中,测试任务已配置为通过 useJUnitPlatform() 使用 JUnit 5。这是运行 JUnit 5 测试(包括 Cucumber 测试)的正确配置。确认您没有意外修改此配置。
Cucumber 功能文件位置:确保您的 Cucumber 功能文件位于 CucumberRunner 类的 @CucumberOptions 注释中指定的目录中。在您的情况下,您已指定 src/test/resources/features。检查此路径相对于您项目的根目录是否正确,并且您的功能文件具有 .feature 扩展名。
Gradle 清理和重建:有时,Gradle 构建可能会进入无法正确获取更改的状态。尝试使用以下命令运行干净的构建:
./gradlew 清洁 ./gradlew 构建
Gradle 测试任务:确保您使用正确的 Gradle 命令来运行测试。您可以使用以下命令运行测试:
./gradlew 测试
检查特定于 IDE 的配置:如果您的测试在从 IDE 运行而不是从 Gradle 运行时有效,请检查是否存在任何可能影响测试执行的特定于 IDE 的配置或插件。有时,IDE 有自己的测试运行器,其工作方式与 Gradle 不同。
更新 Cucumber 依赖项:确保您的 Cucumber 依赖项是最新的。您可以在 Cucumber 官网或存储库上查看最新版本。
检查测试命名约定: 确保您的测试方法遵循 Cucumber 命名约定。 Cucumber 依赖命名约定将功能文件中的步骤映射到步骤定义方法。
您可以添加一些日志记录语句或使用 Gradle 的调试选项来获取有关 Gradle 在运行测试时正在执行的操作的更多信息。例如,您可以在 Cucumber runner 类中添加 println 语句。
完成这些步骤后,您应该能够识别导致“未找到给定包含的测试”错误的问题。如果问题仍然存在,请提供有关您的项目结构的其他信息,我可以进一步提供帮助。