Огурец: NoSuchMethodError: cucumber.runtime.formatter.Plugins

Я получаю исключение в теме IntelliJ и понятия не имею, почему.

Структура проекта

Это файл runner:

@RunWith(Cucumber.class)
@CucumberOptions(
        features = "src/main/resources/features",
        glue = {"DemoDefinitions"},
        tags = "@tests"
        )
public class CucumberRunner {}

Это файл определений:

import cucumber.api.java.en.Given;

public class DemoDefinitions {

    @Given("Login to Azure Succeeded")
    public void login_to_Azure_Succeeded() {
        // Write code here that turns the phrase above into concrete actions
        throw new cucumber.api.PendingException();
    }
}

Это файл функции:

@tests

Feature: PoC Feature

  Scenario: PoC Operations Scenario
    Given Login to Azure Succeeded

И зависимости maven:

<dependencies>
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-core</artifactId>
        <version>4.4.0</version>
    </dependency>
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>4.2.6</version>
    </dependency>
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>4.2.6</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>

Когда я запускаю, выполняю класс бегуна, я получаю:

java.lang.NoSuchMethodError: cucumber.runtime.formatter.Plugins. (Ljava / lang / ClassLoader; Lcucumber / runtime / formatter / PluginFactory; Lcucumber / api / event / EventPublisher; Lio / cucumber / core / options / V PluginOptions;)

Когда я запускаю сам файл функций, я получаю:

Неопределенные сценарии: /C:/Users/talt/IdeaProjects/Poc/src/main/resources/features/poc.feature:5 Сценарий операций PoC

1 Сценарий (1 неопределенный) 1 Шаг (1 неопределенный)

Подскажите, пожалуйста, в чем проблема?


person dushkin    schedule 16.06.2019    source источник


Ответы (3)


Вы смешиваете разные версии Cucumber. Внимательно посмотрите на номера версий.

Вы также включаете больше зависимостей, чем это строго необходимо. Достаточно просто использовать cucumber-java и cucumber-junit. И cucumber-core, и junit являются транзитивными зависимостями.

После исправления зависимостей обязательно повторно импортируйте проект maven.

<dependencies>
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>4.4.0</version>
    </dependency>
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>4.4.0</version>
    </dependency>
</dependencies>
person M.P. Korstanje    schedule 16.06.2019
comment
Спасибо mpkorstanje. Это не внесло изменений. Однако я обнаружил ошибку и исправил ее. Смотрите мой ответ. - person dushkin; 17.06.2019
comment
Тем не менее, вы все равно должны очистить свой импорт. - person Marit; 20.06.2019

Решением было установить клей на пустую строку:

glue = {""}
person dushkin    schedule 17.06.2019

Мы не будем смешивать прямые и транзитивные зависимости, особенно их версии! Это может привести к непредсказуемым результатам. Ниже приведены несколько ошибок, о которых сообщают люди из-за неправильного использования зависимостей.

  • Не удается разрешить импорт cucumber.api.junit
  • java.lang.NoClassDefFoundError: gherkin / IGherkinDialectProvider
  • import cucumber.api.DataTable; не может быть решен

Решение: вы должны добавить правильный набор огуречных зависимостей.

    <dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-junit</artifactId>
    <version>4.2.6</version>
    <scope>test</scope>
    </dependency>

    <dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-picocontainer</artifactId>
    <version>4.2.6</version>
    <scope>test</scope>
    </dependency>

Во-вторых, можно сказать, что у нас нет правильного пути, указывающего на клей. Но просто сделать его пустым не может быть одним из решений, даже если это сработало. Здесь у нас будет правильный путь, а не пустая строка.

person TheSociety    schedule 17.06.2019