cucumber junit runner java.lang.NoSuchMethodError:

32,379

Solution 1

Updating your junit version and maybe also your surefire plugin will fix this problem.

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>

For surefire:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.16</version>
        </plugin>
    </plugins>
</build>

Solution 2

I had the same issue and got fixed once I configured the latest version. The issue was on junit version 4.10. the latest version from 4.11 works good

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>

Solution 3

Different story but same issue... developing a Jenkins plugin, using gradle, had the latest junit:junit:4.12 library on my classpath...

The issue was being caused by the junit:junit-dep:4.10 library, "aka"...

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit-dep</artifactId>
    <version>4.10</version>
    <scope>test</scope>
</dependency>

After explicitly removing it from my configuration classpath, I no longer have the issue.

Solution 4

<dependencies>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>1.2.2</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>1.2.2</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.github.mkolisnyk</groupId>
        <artifactId>cucumber-reports</artifactId>
        <version>0.0.11</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.2</version>
            <configuration>
                <encoding>UTF-8</encoding>
                <source>1.6</source>
                <target>1.6</target>
                <compilerArgument>-Werror</compilerArgument>
            </configuration>
        </plugin>
    </plugins>
</build>
Share:
32,379
Onizuka
Author by

Onizuka

Updated on January 06, 2021

Comments

  • Onizuka
    Onizuka over 3 years

    Trying to implement cucumber to do some automated tests. jUnit tests. I've created 2 files and edited pom.xml that comes with maven project to add dependencies. Content is shown below. The first of two files are cucumber .feature files, which is a gherkin of plain language. The other is CukesRunner.java

    When I run my tests using Project -> Run as ... -> Maven test it works as expected.

    However when I ran the CukesRunner.java file using Eclipse the Eclipse JUnit GUI, I get an error:

    java.lang.NoSuchMethodError: org.junit.runner.Description.createSuiteDescription(Ljava/lang/String;Ljava/io/Serializable;[Ljava/lang/annotation/Annotation;)Lorg/junit/runner/Description;
        at cucumber.runtime.junit.FeatureRunner.getDescription(FeatureRunner.java:43)
        at cucumber.api.junit.Cucumber.describeChild(Cucumber.java:77)
        at cucumber.api.junit.Cucumber.describeChild(Cucumber.java:41)
        at org.junit.runners.ParentRunner.getDescription(ParentRunner.java:226)
        ... 
    

    pom.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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.bdd</groupId>
      <artifactId>airportparking</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>airportparking</name>
      <url>http://maven.apache.org</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
    
      <dependencies>
            <dependency>
                <groupId>info.cukes</groupId>
                <artifactId>cucumber-java</artifactId>
                <version>1.1.5</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>info.cukes</groupId>
                <artifactId>cucumber-junit</artifactId>
                <version>1.1.5</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>com.rubiconproject.oss</groupId>
                <artifactId>jchronic</artifactId>
                <version>0.2.6</version>
                <scope>test</scope>
            </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
            <scope>test</scope>
        </dependency>
      </dependencies>
    </project>
    


    CukesRunner.java:

    package com.bdd.airportparking;
    
    import cucumber.api.junit.*;
    import org.junit.runner.RunWith;
    
    @RunWith(Cucumber.class)
    @Cucumber.Options(
            format={"pretty", "html:target/cucumber"},
            features="src/test/resources"
            )
    public class CukesRunner {
    
    }
    


    ValetParking.feature:

    Feature: Valet Parking
        As a traveler
        In order to determine where to park my car
        I want to know the cost of valet parking
    
    Scenario: Calculate valet parking cost for half an hour
        When I park my car in the Valet Parking Lot for 30 minutes
        Then I will have to pay $12
    


    Output when running CukesRunner.java as a Junit Test:

    java.lang.NoSuchMethodError: org.junit.runner.Description.createSuiteDescription(Ljava/lang/String;Ljava/io/Serializable;[Ljava/lang/annotation/Annotation;)Lorg/junit/runner/Description;
        at cucumber.runtime.junit.FeatureRunner.getDescription(FeatureRunner.java:43)
        at cucumber.api.junit.Cucumber.describeChild(Cucumber.java:77)
        at cucumber.api.junit.Cucumber.describeChild(Cucumber.java:41)
        at org.junit.runners.ParentRunner.getDescription(ParentRunner.java:226)
        at org.junit.runner.Runner.testCount(Runner.java:38)
        at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.countTestCases(JUnit4TestClassReference.java:30)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.countTests(RemoteTestRunner.java:487)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:455)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
    


    How I structured my project in eclipse: http://postimg.org/image/vf6tlw7el/full/