我正在使用Cucumber和JUnit5为我的项目编写测试。我的项目使用Spring框架和Gradle作为构建工具,我使用IntelliJ Idea作为编辑器,其中包含Cucumber和Gradle插件。下面是我的 cucumber 的跑步机:
package com.mycom.myproject.cucumber;
import static io.cucumber.junit.platform.engine.Constants.*;
import org.junit.platform.suite.api.*;
@Suite
@IncludeEngines("cucumber")
@SelectClasspathResource("src/test/resources")
@ConfigurationParameters({
@ConfigurationParameter(key = GLUE_PROPERTY_NAME, value = "com.mycom.myproject.cucumber.steps"),
@ConfigurationParameter(key = FEATURES_PROPERTY_NAME, value = "src/test/resources/cucumber"),
@ConfigurationParameter(key = PLUGIN_PROPERTY_NAME, value = "html")
})
public class RunCucumberTest {
}
这是我的cucumberBootstrap类:
package com.mycom.myproject.cucumber;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import com.mycom.myproject.Application;
import io.cucumber.spring.CucumberContextConfiguration;
@CucumberContextConfiguration
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, args = "spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration,com.arkea.catalyst.kafka.spring.KafkaAutoConfiguration")
@ActiveProfiles({ "IC" })
public class CucumberBootstrap {
}
我的步骤定义类:
package com.mycom.myproject.cucumber.steps;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class StepDefinition extends CucumberBootstrap {
@Quand("I want to calculate my bill")
public void iWantToCalculateMyBill() {
// some code
}
@Alors("I have this result")
public void iHaveThisResult() {
// some assertions
}
}
以下是我的gradle.build文件:
// Tests dependencies
testImplementation 'org.junit.jupiter:junit-jupiter-api'
testImplementation 'org.junit.jupiter:junit-jupiter-engine'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
testImplementation 'io.rest-assured:rest-assured:4.1.2'
testImplementation "io.cucumber:cucumber-java:$cucumberVersion"
testImplementation "io.cucumber:cucumber-spring:$cucumberVersion"
testImplementation "io.cucumber:cucumber-junit-platform-engine:$cucumberVersion"
testImplementation "org.junit.vintage:junit-vintage-engine"
testImplementation 'org.junit.platform:junit-platform-suite:1.9.0'
implementation 'org.junit.platform:junit-platform-commons:1.9.0'
}
test {
useJUnitPlatform()
systemProperty 'java.util.logging.manager', 'org.apache.logging.log4j.jul.LogManager'
testLogging.showStandardStreams = true
testLogging.exceptionFormat = 'full'
}
我的 cucumber 版本是7.5.0。无论我如何更改代码,我总是遇到“没有找到给定包含的测试”错误,我不知道如何更改它。你们有什么线索吗
谢谢
2条答案
按热度按时间kzmpq1sx1#
在跑步课上你有两个问题。
问题1
这将选择一个类路径资源。但是
src/test/resources
不是类路径上的资源。为了解释,考虑一个简单的项目,您可能具有以下布局:
这里
src/main/java
、src/test/java
和src/test/resources
是不同的源。当你构建你的项目时,这些被编译或复制到build
文件夹:然后在运行测试时,类路径由依赖项和
build/classes/java/{main,test}
和build/resources/test
类路径根组成。这意味着
io/cucumber/{Belly,RunCucumberTest,StepDefinitions}.class
和io/cucumber/skeleton/belly.feature
都是类路径上的资源。因为
@SelectClasspathResource
选择了一个类路径资源,所以应该使用@SelectClasspathResource("io/cucumber/skeleton/belly.feature")
。如果你有多个功能在@SelectClasspathResource("io/cucumber/skeleton")
也将工作。问题二
FEATURES_PROPERTY_NAME
之所以存在,是因为Maven和Gradle不支持命令行中的JUnit5s发现选择器。在这种情况下你不需要它。r55awzrz2#
你很接近了!
在
RunCucumberTest
类中:1.添加
1.移除
然后将您的功能文件放在以下位置:
顺便说一句,你不需要: