Как установить путь к моим свойствам огурца, используя огурец-юнит?
Я пытаюсь создать свои первые исполняемые спецификации с Java и Maven. Я создал простой проект с этой структурой:
specification
|-src
|-test
|-java
|-mypackage
|-MyFeatureTest.java
|-resources
|-MyFeature.feature
В тесте junit MyFeatureTest.java
у меня есть следующее:
import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
public class HomepageTest {
}
Теперь https://github.com/cucumber/cucumber-jvm/wiki/IDE-support говорит, что я должен добавить следующую строку:
@Cucumber.Options(paths={"my/super.feature:34"})
Я попытался изменить это на
@Cucumber.Options(paths={"src/test/resources/"})
но аннотация @Cucumber.Options
недоступна вообще. Мой pom.xml
имеет следующие зависимости:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.0.0.RC20</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.0.0.RC20</version>
<scope>test</scope>
</dependency>
Я что-то пропустил?
Обновить. Я что-то упустил: файл функций огурца должен находиться в подкаталоге src/test/resources/mypackage/
. В противном случае это не будет подтверждено тестом junit.
Я могу запускать свои функциональные тесты, когда я помещаю их в один и тот же каталог src/main/test/
, поэтому для меня это не блокиратор. Но я хотел бы понять всю установку.
Ответы
Ответ 1
Взгляните на мой вопрос здесь:
Вы можете указать местоположение в пути к классам, установив атрибут функции в аннотации параметров, например
@Cucumber.Options(features="src/test/resources")
Edit:
в новой версии код
@CucumberOptions(features="src/test/resources")
Ответ 2
Параметр classpath
неочевиден в документации по Cucumber (он также отсутствует в JavaDoc), я в итоге вывел его из документации CLI, в которой задокументированы другие параметры расположения. Смотрите раздел List configuration options
в документации. Также не очевидно, как получить определения функций из другого модуля мультимодульного проекта Maven.
Это то, что заставило меня работать (из IDE и командной строки) в многомодульном проекте Maven.
@CucumberOptions(
features = {"classpath:product"},
//...
)
public class RunCukesTest extends AbstractTestNGSpringContextTests {
где мои файлы объектов были расположены в
main-project
sub-module-1
src/test/java/com/foo/
RunCukesTest.java
src/test/resources/product/
feature_1.feature
feature_2.feature
sub-module-2
...
Мне приятно не видеть src/test/resources
на пути. Обратите внимание, что в пути нет ведущего /
. Использование classpath менее хрупко, потому что classpath (а не текущий рабочий каталог) должен быть четко определен.
Ответ 3
Вы можете использовать
@CucumberOptions(
format = "pretty",
tags = {"[email protected]"},
features = "src/test/resources/com/" //refer to Feature file
)
для сканирования всего файла функции в пакете
Ответ 4
Хорошо, я могу поместить это только в понедельник утром... Макет каталога, который я использовал, был неправильным, я забыл поместить функции огурца в подкаталоги, соответствующие моей структуре пакета.
Убедитесь, что вы создали необходимые каталоги пакетов также в src/test/resources/
!
Ответ 5
Как только вы используете
import cucumber.api.CucumberOptions;
Вам нужно добавить следующее к вашему pom.xml, иначе "mvn test" не будет работать. И вы можете запускать свои тесты только из среды IDE.
См.: https://github.com/cucumber/cucumber-java-skeleton/blob/master/pom.xml
<properties>
<java.version>1.7</java.version>
<junit.version>4.12</junit.version>
<cucumber.version>1.2.2</cucumber.version>
<maven.compiler.version>3.3</maven.compiler.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.version}</version>
<configuration>
<encoding>UTF-8</encoding>
<source>${java.version}</source>
<target>${java.version}</target>
<compilerArgument>-Werror</compilerArgument>
</configuration>
</plugin>
</plugins>
</build>
Ответ 6
Или вы можете просто создать аргументы cucumberoptions, как описано в https://cucumber.io/docs/reference/jvm#cli-runner, и передать их cucumber.api.cli.Main.run(). Это небольшой пример:
String arg = "classpath:MyFeature.feature --dry-run";
String[] args = arg.split(" ");
cucumber.api.cli.Main.run(args, Thread.currentThread().getContextClassLoader());
и используйте его в своем тесте JUnit. Таким образом, вам не нужно создавать отдельный класс для каждого тестового класса только с другими аргументами.
Ответ 7
этап обучения, я не могу выполнить код mu. Может ли кто-нибудь помочь мне решить эту проблему, получив файл функции, не найденный в classpath
Ответ 8
Поместив файл функций в src/test/java, где файл runner и steps или
поместив его под src/main/java, проблема будет решена.
Не забудьте сказать спасибо.:)