当前位置: 首页 > 知识库问答 >
问题:

@BeforeAll不执行

龙永逸
2023-03-14

最近,我将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>

共有2个答案

司马越
2023-03-14

如果您根本无法运行任何测试,并且只想使用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

施彬彬
2023-03-14

如果您能够运行任何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的扩展。在执行外部测试类时,为每个嵌套类调用这些接口的方法。这是意料之中的行为吗?我找不到任何明确说明这一点的文档。 导致输出: