Pergunta

Eu tento construir minha primeira executável especificações com Java e Maven.Eu criei um projeto simples com esta estrutura:

specification
|-src
  |-test
    |-java
      |-mypackage
        |-MyFeatureTest.java
    |-resources
      |-MyFeature.feature

No teste com junit MyFeatureTest.java Eu tenho este:

import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;

@RunWith(Cucumber.class)
public class HomepageTest {
}

Agora https://github.com/cucumber/cucumber-jvm/wiki/IDE-support diz que eu devo adicionar a seguinte linha:

@Cucumber.Options(paths={"my/super.feature:34"})

Eu tentei modificar a

@Cucumber.Options(paths={"src/test/resources/"})

mas a anotação @Cucumber.Options não está disponível em todos os.Meu pom.xml tem este dependências:

<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>

Eu estou faltando alguma coisa?

Atualização Eu estava faltando alguma coisa:O pepino do arquivo de recurso tem de ser em um subdiretório src/test/resources/mypackage/.Caso contrário ele não vai ser pego pelo junit test.

Eu posso executar meu recurso testes quando eu colocá-los no mesmo diretório src/main/test/, então não é um bloqueador para mim.Mas eu gostaria de compreender toda a instalação.

Foi útil?

Solução

Dê uma olhada na minha pergunta aqui:

Você pode especificar um local no classpath definindo o recurso atributo nas opções de anotação como

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

Editar:

em novas versões de código é

@CucumberOptions(features="src/test/resources")

Outras dicas

O classpath opção não é óbvio o Pepino documentação (não é no JavaDoc tanto), eu acabei inferir que a partir do CLI documentação, que possui outras opções de localização documentado.Ver o List configuration options na seção de documentos.Também não é óbvio como obter o recurso defintions a partir de outro módulo de multi módulo Maven projectg.

Isso é o que me vai (de IDE e de linha de comando) em um Software multi módulo de projeto.

@CucumberOptions(
        features = {"classpath:product"},
        //...
)
public class RunCukesTest extends AbstractTestNGSpringContextTests {

onde a minha característica arquivos foram localizados em

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
        ...

Agrada-me a não ver src/test/resources no caminho.Observe que não há nenhum líder / no caminho.Usando o classpath é menos frágil, porque o classpath (ao invés de incluir o diretório de trabalho atual) deve ser bem definido.

Você pode usar

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

para pesquisar todas arquivo de recurso no pacote

Ok, eu só posso colocar isso na segunda-feira de manhã...O layout de diretório que eu usei não era a correta, eu esqueci de colocar o pepino recursos em subpastas correspondentes a minha estrutura de pacote.

Certifique-se de que você criar o pacote necessário de diretórios também em src/test/resources/!

Uma vez que você usar

import cucumber.api.CucumberOptions;

Você precisará adicionar o seguinte ao seu pom.xml, caso contrário, "mvn test" não vai funcionar.E você só pode executar os testes a partir do IDE.Veja: 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>

Ou você poderia apenas criar a sua cucumberoptions argumentos, como em https://cucumber.io/docs/reference/jvm#cli-runner descrito e passá-lo para o pepino.api.cli.Principal.run().Este é um pequeno exemplo:

String arg = "classpath:MyFeature.feature --dry-run";
String[] args = arg.split(" ");
cucumber.api.cli.Main.run(args, Thread.currentThread().getContextClassLoader());

e usá-lo em você JUnit Test.Então você não tem que criar um separar classe para cada testclass apenas com outros argumentos.

Colocando o arquivo de recurso em src/test/java onde o corredor e as etapas de arquivo ou colocando-o sob src/main/java o problema será resolvido.

Não se esqueça de dizer obrigado.:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top