Огурец: NoSuchMethodError: cucumber.runtime.formatter.Plugins - PullRequest
1 голос
/ 16 июня 2019

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

Project structure

Это файл бегуна:

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

Когда я запускаю команду runner class, я получаю:

java.lang.NoSuchMethodError: cucumber.runtime.formatter.Plugins (Ljava / Lang / ClassLoader; Lcucumber / выполнения / форматировщик / PluginFactory; Lcucumber / API / событие / EventPublisher; Лио / огурец / ядро ​​/ варианты / PluginOptions;). В * +1023 *

Когда я запускаю сам файл объекта, я получаю:

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

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

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

Ответы [ 3 ]

2 голосов
/ 16 июня 2019

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

Вы также включаете больше зависимостей, чем строго необходимо.Простого использования 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>
1 голос
/ 17 июня 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>

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

1 голос
/ 17 июня 2019

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

glue = {""}
...