最近,我将Cucumberinfo.cukes迁移到io.cucumber,将Junit4迁移到Junit5,因为执行不适用于我的java版本。
我的主页
public class BasePage {
public static RemoteWebDriver driver;
@BeforeAll
public static void initWebDriver() {
System.out.println("i will init Driver");
initDriver()
}
}
我的Pom
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>7.1.0</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>7.1.0</version>
<scope>test</scope>
</dependency>
如果您根本无法运行任何测试,并且只想使用JUnit 5,并且不想将JUnit Vintage与Cucumber JUnit一起使用,那么您可以使用Cucumber JUnit平台引擎。
为此,您至少需要这些依赖关系:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>5.8.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-bom</artifactId>
<version>7.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit-platform-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
注意:您可以使用dependencyManagement只声明Cucumber和JUnit的版本一次。
然后,您可以使用JUnit 5 Suite注释配置运行程序类。
package io.cucumber.skeleton;
import org.junit.platform.suite.api.ConfigurationParameter;
import org.junit.platform.suite.api.IncludeEngines;
import org.junit.platform.suite.api.SelectClasspathResource;
import org.junit.platform.suite.api.Suite;
import static io.cucumber.junit.platform.engine.Constants.PLUGIN_PROPERTY_NAME;
@Suite
@IncludeEngines("cucumber")
@SelectClasspathResource("io/cucumber/skeleton")
@ConfigurationParameter(key = PLUGIN_PROPERTY_NAME, value = "pretty")
public class RunCucumberTest {
}
有关最低工作示例,请参阅:https://github.com/cucumber/cucumber-java-skeleton
如果您能够运行任何Cucumber场景,那么很可能是对BeforeAll注释使用了错误的导入。正确的是io。cucumberJava语言在所有io之前。cucumberJava语言毕竟。
https://github.com/cucumber/cucumber-jvm/tree/main/java#hooks
package io.cucumber.example;
import io.cucumber.java.AfterAll;
import io.cucumber.java.BeforeAll;
public class StepDefinitions {
@BeforeAll
public static void beforeAll() {
// Runs before all scenarios
}
@AfterAll
public static void afterAll() {
// Runs after all scenarios
}
}
我有一个简单的 Junit 5 Siute,带有@BeforeAll和@AfterAll注释。执行套件,但这些方法不会在执行所有类之前和之后执行。
我使用的是spring boot、kotlin和junit5。我有一个测试类,当我在未触发所有函数之前使用RunWith(SpringRunner::class)@时,但当我删除该类时,它会给lateinit字段带来错误。
问题内容: 之间的主要区别是什么 和 和JUnit中5 @BeforeEach和@BeforeAll 和 根据JUnit ,在以下情况下使用Api: 编写测试时,通常会发现几个测试需要先创建类似的对象,然后才能运行。 而可以用来建立数据库连接。但是不能一样吗? 问题答案: 标记的代码在每次测试之前执行,而在整个测试夹具之前运行一次。如果你的测试类有十个测试,则代码将执行十次,但仅执行一次。 通常,
之间的主要区别是什么 和 根据JUnit Api用于以下情况: 编写测试时,通常会发现一些测试在运行之前需要创建类似的对象。 而可用于建立数据库连接。但是以前的
Junit5引入了@BeforeAll来表示应在当前测试类中的所有测试之前执行带注释的方法。但是它要求方法是静态的。 我的 Scala 测试套件中有以下结构: 以及其他测试类别: 所以我希望< code > codeNeedeForAllTests 在所有测试之前被调用,但是问题是< code>@BeforeAll要求方法是静态的,为此我需要将codeNeedeForAllTests作为对象,以便
我有一个测试类,里面有多个嵌套的测试类。外部测试类使用实现BeforeAllCallback和AfterAllCallback的扩展。在执行外部测试类时,为每个嵌套类调用这些接口的方法。这是意料之中的行为吗?我找不到任何明确说明这一点的文档。 导致输出: