Я пытаюсь использовать Cucumber для регистрации пользователя в веб-приложении, но каждый раз, когда я запускаю Registration.java в качестве теста Junit, я получаю сообщение об ошибке инициализации "java.lang.NoClassDefFoundError: io/cucumber/core/options/CucumberOptionsAnnotationParser$ Провайдер опций". Как я могу это исправить?
пом.xml
<project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.alchemy.learning</groupId>
<artifactId>CucumberLearning</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-jvm</artifactId>
<version>1.2.6</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.2.6</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.2.6</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>7.10.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-jvm-deps</artifactId>
<version>1.0.6</version>
</dependency>
</dependencies>
</project>
тест.функция
Feature: User Registration
@web
Scenario Outline: Validate Registration Field
Given User on webapp
When I enter username as "Mia" and password as "Mia1234"
And I submit login page
Then I redirect to UserHome page
Examples:
| uname | pass |
| Mia | Mia1234 |
| admin | admin |
StepDef.java
package stepdefinitions;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.When;
import cucumber.api.java.en.Then;
public class StepDef {
@Given("^User on webapp$")
public void user_on_webapp() throws Throwable {
System.out.print("Webapp is open");
}
@When("^I enter username as \"([^\"]*)\" and password as \"([^\"]*)\"$")
public void i_enter_username_as_and_password_as(String arg1, String arg2) throws Throwable {
System.out.print("Enter the username and password in the fields");
}
@When("^I submit login page$")
public void i_submit_login_page() throws Throwable {
System.out.print("Clicked on submit button");
}
@Then("^I redirect to UserHome page$")
public void i_redirect_to_user_home_page() throws Throwable {
System.out.print("Successfully logged in");
}
}
Регистрация.java
package stepdefinitions;
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import io.cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(features = "classpath:test.feature", glue = "stepdefinitions", plugin = {"html:target/test-report"})
public class Registration {
}
Я заменил все зависимости в моем файле pom.xml этими зависимостями.
<dependencies>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>7.10.1</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>7.10.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-core</artifactId>
<version>7.10.1</version>
</dependency>
</dependencies>
Затем я заменил операторы импорта в своем StepDef.java на
import io.cucumber.java.en.*
Наконец, в моем файле Registration.java я заменил
import cucumber.api.CucumberOptions;
с
import io.cucumber.junit.CucumberOptions;