Como faço para definir o caminho para o meu características do Pepino com pepino-junit?
-
12-12-2019 - |
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.
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.:)