I'm trying to introduce Unit tests to our system, and have run into a problem with Junit not finding test.
I have these 3 tests:
When I run all tests in the module:
It finds X and Y tests, but not Z:
The difference between the 3 is only in the package name:
The package com.exlibris.x (XTest) doesn't exist in the project
The package com.exlibris.core.infra.svc.api.flags (YTest) exists in a different module in the project (that is outputted to a different jar file)
The package com.exlibris.repository.web.mms.publishing (ZTest) exists in the same module under the src/main/java
My pom.xml has the following dependencies (inherited from the parent pom):
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.9.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.9.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-engine</artifactId>
<version>1.9.1</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
EDIT: These are my run configurations
So it turned out there were a few issues (some of them are likely not related to the specific question, but still best practices).
What helped for me was:
Consolidate dependency management of JUnit by importing junit-bom
Upgrading maven-surefire-plugin to latest version
Removing unnecessary configs from maven-surefire-plugin (my configuration tag is now empty)
Reloading the project in IntelliJ (Right click project -> Maven -> Reload project)
Thanks a lot to khmarbaise and Kathrin Geilmann for the help :)
I am using Eclipse and Maven to build a project that is an excuse to try putting together some technologies I would like to get more experience with, and using ports and adapters (hexagonal) architecture. I am using Cucumber for Java as the testing framework, and I am trying to write the code using TDD & BDD. The project (in the general sense) consists of multiple Eclipse projects set up with the Maven nature.
Here is a list of the relevant Eclipse projects:
pricetracker.data
src/main/java - contains entity POJOs
src/test/java - empty
pricetracker.data.repo - depends on pricetracker.data
src/main/java - data access interface layer that defines the interface and factories for persistence
src/test/java - contains step definitions and step data (currently called StepData)
src/test/resources - contains Cucumber .feature files
pricetracker.data.repo.derby - depends on pricetracker.data.repo
src/main/java
src/test/java - contains a RunCucumberTest class, initializes the repo in StepData
pricetracker.data.repo.memory - depends on pricetracker.data.repo
src/main/java
src/test/java - contains a RunCucumberTest class
I believe I have all of the dependencies pointing correctly. However, the RunCucumberTest classes cannot see the StepData class (The import MyGroupId.pricetracker.data.repo.StepData cannot be resolved). And I cannot tell whether this is an Eclipse problem or a Maven problem.
Here is what the pom.xml looks like in pricetracker.data.repo.derby (replacing my actual groupId with myGroupId):
<dependencies>
<dependency>
<groupId>myGroupId</groupId>
<artifactId>pricetracker.data.repo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>myGroupId</groupId>
<artifactId>pricetracker.data</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<version>10.14.2.0</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-picocontainer</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
Now if in pricetracker.data.repo I move StepData from the src/test/java folder to the src/main/java folder, it becomes visible from the pricetracker.data.repo.* subpackages RunCucumberTest files. However, this is not production code and should not be under src/main/java.
In Eclipse itself, in each project, the test folders are all marked as "Contains test sources: Yes" and are set to compile into a separate folder from the main classes.
Any pointers are appreciated!
I'm trying to convert to JUnit 5 version inside IntelliJ CE 2017.2.3 and experiencing the following:
Same tests ran with JUnit 4, the error manifests itself only with the upgrade.
The pom.xml portion:
<!-- <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>RELEASE</version>
</dependency>
</dependencies>
These Java snippets might be relevant:
What am I doing wrong?
This looks like this issue. Please upgrade to latest IDE version which has updated JUnit libraries and should be working fine.
Everytime I'm trying to run a single feature file or a single scenario in a feature file, it create new configuration file in intellij. The Glue property is empty and the Feature or folder path is located on a specific feature file, the feature file of that scenario:
The errors after trying to run a single feature file or a single scenario is:
Undefined step: .... for every step in the feature file/scenario I'm trying to run.
Is there any sulotion to this problem instead of creating 1000 configurations?
My dependencies:
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java8</artifactId>
<version>1.2.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-jvm</artifactId>
<version>1.2.5</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.2.4</version>
<scope>test</scope>
</dependency>
You have two different versions of Cucumber involved. 1.2.4 and 1.2.5, is that the reason you're having problems?
IDEA adds "glue" automatically if your step definition file is located under named package (not right under test->java).
I checked this example http://github.com/czeczotka/cucumber-jvm-maven with your dependencies and it seems to work fine.
Im having issues running a feature in Cucumber, the feature is very basic as it's from a tutorial.
It is not defined and is as follows:
Feature: Proof that my concept works
Scenario: My first test
Given this is my first step
When this is my second step
Then this is my final step
My Cucumber runner class is as follows:
package cucumber;
import org.junit.runner.RunWith;
import cucumber.api.junit.Cucumber;
#RunWith(Cucumber.class)
#Cucumber.Options(
format = {"pretty", "json:target/"},
features = {"src/cucumber/"}
)
public class CucumberRunner {
}
Also the external .jar files that I have in the project are as follows:
The exception that I'm getting is:
Exception in thread "main" cucumber.runtime.CucumberException: Failed
to instantiate public
cucumber.runtime.java.JavaBackend(cucumber.runtime.io.ResourceLoader)
with [cucumber.runtime.io.MultiLoader#75d837b6]
I've tried to look around online for the solution to this problem but have not had any luck.
I've also discussed with the OP of the tutorial and I'm still awaiting feedback but it has been a while.
I ran into a similar issue and got the same error as you did.
Firstly mention the path to the feature file
features = {"src/cucumber/myfile.feature"}
Anyway, that didn't cause the error.
To just run your Cucumber runner class, all the dependencies you need are
cucmber-junit
cucumber-java and
junit.
I had an additional cucumber-guice which was creating the problem and once I removed it, the error went away and runner was executed successfully.
From the link to the image you have mentioned it looks like you are not using cucumber-guice but still I would recommend you remove other unnecessary cucumber dependencies and try again.
1, I ran into this too few days ago, its simple just remove cucumber-Spring from the dependency.
2 If that doesn't work try updating cucumber-core, cucumber-junit, and cucumber-java all version 1.2.3
I believe the issue is that many of the cucumber add-ins, such as cucumber-testng, cucumber-spring, and (in my case) cucumber-guice, expect the corresponding module they link to be included as well. But apparently the cucumber experts decided not to include this dependency in their pom.xml files, so the problem doesn't manifest itself until runtime.
So (to answer Eugene S's question under LING's answer) if you want to actually use guice with cucumber, you need to also add guice itself as a dependency.
This worked for me, I hope it will work for you as well.
Update your Cucumber dependencies in pom.xml
i.e
cucumber-java (1.2.2)
cucumber-jvm (1.2.2)
cucumber-junit (1.2.2)
And update your Junit dependency as well. (4.11).
The only reason for this error is the version of all the cucumber libraries are not same. It should be like this:
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java8</artifactId>
<version>4.2.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-picocontainer -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-picocontainer</artifactId>
<version>4.2.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-testng -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-testng</artifactId>
<version>4.2.6</version>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
First Thing : We would request you to use Cucumber v >=4.0.0 as you are using pretty old dependency(v1.2.5) of Cucumber.
Key Point : We shall not mix direct & transitive dependencies specially their versions! Doing so can cause unpredictable outcome.
Solution: Please remove. cucumber-core, cucumber-java, cucumber-jvm-deps, gherkin and cucumber-html. They're transitive dependencies and will be provided by your direct dependencies.
You can add below set of cucumber minimal dependencies.
<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>
After spending a lot of time on this issue, most of the errors I was receiving were due to dependencies and dependencies versions mismatch. Adding these dependencies to pom.xml file worked for me:
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-scala_2.11</artifactId>
<version>4.7.1</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-jvm -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-jvm</artifactId>
<version>4.8.1</version>
<type>pom</type>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-junit -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-java8 -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java8</artifactId>
<version>4.8.1</version>
</dependency>