@beforeAll не выполняется

#java #cucumber #junit5

#java #огурец #junit5

Вопрос:

Недавно я перенес cucumber info.cukes в io.cucumber и Junit 4 в Junit 5, потому что выполнение не работало с моей версией Java.

моя базовая страница

 public class BasePage {

    public static RemoteWebDriver driver;

    @BeforeAll
    public static void initWebDriver() {
        System.out.println("i will init Driver");
       initDriver()
   }
}
 

мой Пом

 <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>
 

Комментарии:

1. И как выглядит ваш тест?

2. Я думаю, вам следует использовать аннотацию @RunWith …. над именем класса. Что-то вроде: @RunWith(JUnitPlatform.class ) базовая страница общедоступного класса …..

3. Мой тест: «‘ импортировать io.cucumber.junit. Cucumber; импортировать io.cucumber.junit. CucumberOptions; импортировать org.junit.runner. Выполнить с помощью; @RunWith(Cucumber.class ) @CucumberOptions(функции = {«src /test/ресурсы / функции»} ,клей = «» ,теги = «@Test» )»‘

4. я попытался добавить аннотацию: @RunWith(JUnitPlatform.class ) базовая страница общедоступного класса, но не может разрешить JUnitPlatform.class

Ответ №1:

Если вы вообще можете запустить какой-либо сценарий Cucumber, вы, вероятно, используете неправильный импорт для @BeforeAll аннотации. Правильными являются io.cucumber.java.BeforeAll и io.cucumber.java.AfterAll .

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
    }
}
 

Ответ №2:

Если вы вообще не можете запускать какие-либо тесты, и вы хотите использовать только JUnit 5, и вы не хотите использовать JUnit Vintage с Cucumber JUnit, тогда вы можете использовать cucumber-junit-platform-engine .

Для этого вам нужны эти зависимости как минимум:

     <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 один раз.

Затем вы можете настроить класс runner, используя аннотацию 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