Сбой, потому что ваш класс test/java/stepDefinitions/Contacts
не находится в той же области пути к классу, что и src/main/java/MainJarvish
.
Предполагается следующая структура.
src/main/java/MainJarvish.java
src/test/java/stepDefinitions/Contacts.java
src/test/java/FeatureList/Smoke.feature
MainJarvish.java
import cucumber.api.cli.Main;
public class MainJarvish {
public static void main(String[] args) throws Exception {
String[] options = {"--glue", "stepDefinitions",
"src/test/java/FeatureList/Smoke.feature"};
byte exitcode = Main.run(options, Thread.currentThread().getContextClassLoader());
System.out.println("exitcode = " + exitcode);
}
}
Contacts.java
package stepDefinitions;
import cucumber.api.java.en.Given;
public class Contacts {
@Given("^Submit message for execution$")
public void submitMessageForExecution() throws Throwable {
System.out.println("submitMessageForExecution");
}
}
Smoke.feature
Feature: example feature
Scenario: describe the test scenario
Given Submit message for execution
скомпилировать классы
mvn clean compile test-compile
генерирует class
файлы
target/classes/MainJarvish.class
target/test-classes/stepDefinitions/Contacts.class
Когда вы сейчас выполняете ManJarvish
mvn exec:java -Dexec.mainClass=MainJarvish
, класс Contacts
не находится напуть к классу и поэтому определение шага не найдено.
[INFO] --- exec-maven-plugin:1.6.0:java (default-cli)
...
Undefined scenarios:
src/test/java/FeatureList/Smoke.feature:3 # describe the test scenario
1 Scenarios (1 undefined)
1 Steps (1 undefined)
Поскольку MainJarvish
находится в src/java
, при его выполнении к пути к классу добавляются только классы проекта ниже target/classes
.
Если класс Contacts
будетбыть на пути к классам, например, путем изменения области действия пути к классам
mvn exec:java -Dexec.mainClass=MainJarvish -Dexec.classpathScope="test"
теперь классы ниже target/classes
и ниже target/test-classes
добавлены к пути к классу, и определение шага найдено.
[INFO] --- exec-maven-plugin:1.6.0:java (default-cli)
submitMessageForExecution
...
1 Scenarios (1 passed)
1 Steps (1 passed)
В зависимости от того, чего вы хотите достичь, вы можете подумать о том, чтобы переместить MainJarvish
в test/java
или создать класс тестового бегуна.
src / test / java / TestRunner.java
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(
glue = "stepDefinitions",
features="src/test/java/FeatureList/Smoke.feature"
)
public class TestRunner {
}
, затем вы можете запустить тест функции как
mvn clean test
output
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running TestRunner
submitMessageForExecution
1 Scenarios (1 passed)
1 Steps (1 passed)