While Running Cucumber Test cases from Jar its not able to find step definations?
project-root
│
├── src
│ ├── main
│ │ └── java
│ │ └── com.example.package
│ │ └── Main.java (Cucumber CLI usage)
│ └── test
│ ├── java
│ │ └── com.example.package
│ │ └── runner
│ │ └── YourTestRunner.java (Test Runner class)
│ │ └── stepdefinition
│ │ └── YourStepDefinitions.java (Cucumber step definitions)
│ └── resources
│ └── features
│ └── your.feature
I have folder structure like above .
Executing using
package com.example;
import io.cucumber.core.cli.Main;
public class Main {
public static void main(String[] args) throws Throwable {
// Pass your command-line arguments to the Cucumber CLI Main class
String[] cucumberArgs = {
"--glue", "com.example.package.runner.YourTestRunner",
"--glue", "com.example.package.stepdefinition",
"classpath:/features",
"-t", "@mytag"
};
Main.run(cucumberArgs, Thread.currentThread().getContextClassLoader());
}
}
gradle.build
plugins {
id 'java'
id 'com.springframework.boot' version ''
id 'io.spring.dependency-management' version ''
id 'com.github.johnrengelman.shadow' version '7.1.2'
}
repositories {
jcenter()
}
dependencies {
testImplementation "io.cucumber:cucumber-java8:7.xx"
testImplementation "io.cucumber:cucumber-java:7.xx"
implementation "io.cucumber:cucmber-spring:7.xx"
}
test {
useJUnitPlatform()
}
task buildCustomFatJar(type: Jar) {
zip64 = true
from sourceSets.main.output
from sourceSets.test.output
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
// Set the main class for the JAR
manifest {
attributes 'Main-Class': ' com.example.package.Main'
}
with jar
}
Running jar
java -jar custom-jar-name.jar
result
5 Scenarios (5 Undefined) 10 Steps (5 skipped, 5 undefined)
Since there was no main method so created main class with main method.
Expecting to run test cases from jar.