Как мне установить путь к моим функциям Cucumber, используя cucumber-junit? - PullRequest
19 голосов
/ 12 марта 2012

Я пытаюсь создать свои первые исполняемые спецификации на 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/, поэтому для меня это не блокировка. Но я хотел бы понять всю установку.

Ответы [ 7 ]

17 голосов
/ 14 декабря 2012

Посмотрите на мой вопрос здесь :

Вы можете указать местоположение на пути к классам, установив атрибут объекта в аннотации параметров, например

@Cucumber.Options(features="src/test/resources")

Изменить:

в новых версиях код

@CucumberOptions(features="src/test/resources")
12 голосов
/ 03 августа 2016

Я довольно поздно на вечеринку (4 года!), Но подумал, что это стоит ответа, так как никто не упомянул оценку classpath, а приведенные выше решения не сработали в ситуации с несколькими модулями Maven.

Параметр classpath был неочевиден в документации по Cucumber (не в JavaDoc), в итоге я вывел его из документации CLI , в которой задокументированы другие параметры местоположения.См. Раздел List configuration options в документации.

Это то, что заставило меня (работать из 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 в пути.

7 голосов
/ 08 июля 2014

Вы можете использовать

@CucumberOptions(
    format = "pretty",
    tags = {"~@Ignore"},
    features = "src/test/resources/com/"  //refer to Feature file
)

для сканирования всех файлов функций в пакете

5 голосов
/ 12 марта 2012

Хорошо, я могу поместить это только в понедельник утром ... Я использовал неправильную структуру каталогов, я забыл поместить функции огурцов в подкаталоги, соответствующие структуре моего пакета.

Makeубедитесь, что вы создали необходимые каталоги пакетов также в src/test/resources/!

1 голос
/ 05 февраля 2016

Или вы можете просто создать аргументы 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. Поэтому вам не нужно создавать отдельный класс для каждого тестового класса только с другими аргументами.

1 голос
/ 16 ноября 2015

После того, как вы используете

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>
0 голосов
/ 07 апреля 2017

Если поместить файл компонента в src / test / java , где файл бегуна и шагов, или поместить его в src / main / java , то проблема будет решена.

Не забудьте сказать спасибо .:)

...