Я пытался запустить весенние тесты на огурец, используя комбинацию Junit (4.12), Cucumber-Java (4.1.1), Cucumber-Spring (4.1.1) и Cucumber-Junit (4.1.1).).У меня нет проблем с загрузкой связующего кода при запуске тестов из среды IDE (IntelliJ 2018.3.4), но кажется, что по какой-то причине, когда я пытаюсь запустить из скомпилированного jar-файла (что в данном случае является обязательным требованием), cucumber не 'найти определения шагов.
Я уже пробовал несколько форматов кода клея, таких как: "classpath: com.abcstepdefs" "com.abcstepdefs" "classpath: com / a / b / c / stepdefs"
Iтакже пытался предоставить относительные пути от класса бегуна до класса определений шагов (вложенный всего на один уровень ниже) "stepdefs"
Также попытался запустить с использованием как JUnit, так и cucumber.cli.Main и попыталсяиспользовать разные стили определений шагов (оба выражения огурца - на которые указывают мне пропущенные фрагменты шагов - и регулярное выражение)
Я использую плагин spring-boot-maven-plugin, поэтому я знаю, что это в целом меняетсяструктура jar
Все вышеперечисленные варианты полностью работают при запуске из IDE, но не из файла jar
Основной класс:
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
@ComponentScan(basePackages = {"com.a.b.test.core.data",
"com.a.b.c",
"com.a.b.c.stepdefs"}
)
public class CucumberApplication {
public static void main(String[] args) throws IOException, InterruptedException {
SpringApplication.run(CucumberApplication.class, args);
Result result = JUnitCore.runClasses(RunnerCentral.class);
System.exit(result.wasSuccessful() ? 0 : 1);
}
}
Класс бегуна:
package com.a.b.c;
@RunWith(Cucumber.class)
@CucumberOptions(features = "classpath:BOOT-INF/classes/features",
glue = "classpath:com/a/b/c/stepdefs",
plugin = "json:target/cucumber-html-reports/cucumber.json")
public class RunnerCentral {
}
Конфигурация POM для spring-boot-maven-plugin:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.0.RELEASE</version>
<configuration>
<fork>true</fork>
<mainClass>${start-class}</mainClass>
<requiresUnpack>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-spring</artifactId>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
</dependency>
</requiresUnpack>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
Я ожидаю, что поведение будет совместимым между запуском из IDE и запуском из упакованного источника, хотя я могу бытьМиссЧто-то
Еще одна вещь, которую я хочу упомянуть, это то, что при замене бэкенда на cucumber-picocontainer все работает (пружина является обязательным условием, поэтому обмен невозможен)