#java #selenium #junit #cucumber
Вопрос:
После нескольких лет кодирования в Cucumber я получил странную ошибку при попытке выполнить тесты:
Exception in thread "main" java.lang.NoSuchMethodError: org.junit.runner.Description.createSuiteDescription(Ljava/lang/String;Ljava/io/Serializable;[Ljava/lang/annotation/Annotation;)Lorg/junit/runner/Description;
at io.cucumber.junit.FeatureRunner.getDescription(FeatureRunner.java:118)
at io.cucumber.junit.Cucumber.describeChild(Cucumber.java:191)
at io.cucumber.junit.Cucumber.describeChild(Cucumber.java:89)
at org.junit.runners.ParentRunner.getDescription(ParentRunner.java:290)
at com.intellij.junit4.JUnit4IdeaTestRunner.getDescription(JUnit4IdeaTestRunner.java:79)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:51)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)
Класс тестраннера:
package codelab.runners;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(
glue = {"codelab.step", "codelab.page", "codelab.hooks", "codelab.helpers", "codelab.api"},
features = "src/test/resources/features/",
plugin = {"json:target/cucumber.json", "pretty"})
public class TestRunner {
}
Ошибка строго связана с путем к объекту, указанным в аннотации @CucumberOptions. Путь правильный, и я понятия не имею, почему он вдруг перестал работать…
POM.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>codelab</groupId>
<artifactId>babel_guru_selenium</artifactId>
<version>1.0</version>
<properties>
<projectName>BabelGuru</projectName>
<reportInputDirectory>${project.build.directory}</reportInputDirectory>
<reportOutputDirectory>${project.build.directory}/cucumber-report-html</reportOutputDirectory>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>selenium</id>
<phase>initialize</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<file>${project.basedir}/src/test/resources/lib/JARs/SeleniumHelper.jar</file>
<groupId>codelab</groupId>
<artifactId>SeleniumHelper</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<pomFile>D:/projects/quality_assurance/Engines/SeleniumHelper/pom.xml</pomFile>
</configuration>
</execution>
<execution>
<id>webdriver</id>
<phase>initialize</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<file>${project.basedir}/src/test/resources/lib/JARs/WebDriverFactory.jar</file>
<groupId>codelab</groupId>
<artifactId>WebDriverFactory</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<pomFile>D:/projects/quality_assurance/Engines/WebDriverFactory/pom.xml</pomFile>
</configuration>
</execution>
<execution>
<id>restAssured</id>
<phase>initialize</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<file>${project.basedir}/src/test/resources/lib/JARs/RestAssuredEngine.jar</file>
<groupId>codelab</groupId>
<artifactId>RestAssuredHelper</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<pomFile>D:/projects/quality_assurance/Engines/RestAssuredHelper/pom.xml</pomFile>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<filtering>true</filtering>
<directory>./src/main/resources/profiles/${build.profile.id}</directory>
</resource>
</resources>
</build>
<dependencies>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.8</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
</dependency>
<dependency>
<groupId>codelab</groupId>
<artifactId>RestAssuredHelper</artifactId>
<version>1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>codelab</groupId>
<artifactId>SeleniumHelper</artifactId>
<version>1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>codelab</groupId>
<artifactId>WebDriverFactory</artifactId>
<version>1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>7.0.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>7.0.0</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-picocontainer</artifactId>
<version>7.0.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>[4.10]</version>
<scope>test</scope>
</dependency>
</dependencies>
<profiles>
<profile>
<id>local</id>
<properties>
<build.profile.id>local</build.profile.id>
</properties>
</profile>
<profile>
<id>dev</id>
<properties>
<build.profile.id>dev</build.profile.id>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<build.profile.id>test</build.profile.id>
</properties>
</profile>
</profiles>
</project>
Любая помощь была бы действительно оценена. Спасибо 🙂
Комментарии:
1. Ужинать с этой версией Junit?
2. Это строгое использование версии 4.10, не более новой.
3. И какой именно метод не удалось найти с помощью cucumber?
4. Тот, который вы можете увидеть в стопке. Прямо сейчас я заметил, что если у меня есть пустой файл функций, например, с закомментированными сценариями, TestRunner может получить к нему доступ. Конечно, он ничего не запускает, но и не создает исключения. В случае сценария снова создается исключение…
5. Итак, вы сказали своей системе сборки использовать очень специфическую версию JUnit. И у вас есть Огурец, жалующийся, что он не может найти метод JUnit. Возможно, вам захочется соединить точки.