如何为运行(Cumber)验收测试指定单独的maven目标?
我有以下项目结构:如何为运行(Cumber)验收测试指定单独的maven目标?,maven,integration-testing,cucumber-jvm,cucumber-junit,Maven,Integration Testing,Cucumber Jvm,Cucumber Junit,我有以下项目结构: MyProject --src --test --acceptance --step_definitions --features --unit 我希望能够在Maven中分别运行cucumber测试(在测试/验收中)和在测试/单元中声明的单元测试,以便它们可以在不同的CI构建计划中运行。我使用cucumber junit,因此每个验收测试的“运行者”都是用junit编写的 这可能吗 这可能吗 是的,这是
MyProject
--src
--test
--acceptance
--step_definitions
--features
--unit
我希望能够在Maven中分别运行cucumber测试(在测试/验收中)和在测试/单元中声明的单元测试,以便它们可以在不同的CI构建计划中运行。我使用cucumber junit,因此每个验收测试的“运行者”都是用junit编写的
这可能吗
这可能吗
是的,这是可能的。我认为您应该将您的单元与验收/集成测试分开,包括:
稍微修改了这两个文件夹的文件夹结构,将集成测试文件放在src/it
的目录中:
MyProject/
(SUT)src/main/java/
(单元测试代码)src/test/
java/
resources/
(验收/集成测试)src/it/
(步骤定义)java/
(功能文件)资源/
- 对于单元测试:
- 对于验收/集成测试:
<profiles>
<profile>
<id>acceptance-tests</id>
<build>
<plugins>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.12</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
对于完整的示例,我建议您按照建议修改文件夹结构,使其具有用于集成和验收测试的共享文件夹,但您也可以具有原始文件夹结构。另外,您在评论中提到,您希望将所有三个(包括未提及的集成测试)分开,这是可能的,尽管有点骇人听闻
由于单元测试似乎有test/unit
,验收测试似乎有test/acceptance
,所以我假设集成测试有test/integration
<profiles>
<profile>
<id>acceptance-test</id>
<build>
<plugins>
<plugin>
<!-- to run directly: mvn failsafe:integration-test -P acceptance-test -->
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.12</version>
<configuration>
<testSourceDirectory>test/acceptance</testSourceDirectory>
<includes>
<include>**/*Acceptance.java</include>
</includes>
<excludes>
<exclude>**/*IT.java</exclude>
<exclude>**/*Test.java</exclude>
</excludes>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.9.1</version>
<executions>
<execution>
<id>add-test-source</id>
<phase>generate-test-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>test/unit</source>
<source>test/integration</source>
<source>test/acceptance</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12</version>
<configuration>
<testSourceDirectory>test/unit</testSourceDirectory>
</configuration>
</plugin>
<plugin>
<!-- to run directly: mvn failsafe:integration-test -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<testSourceDirectory>test/integration</testSourceDirectory>
</configuration>
<!-- execution below can be used, if tests are needed on
mvn:integration-test -->
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
验收试验
. 这意味着您需要为测试制定命名策略,以便将它们彼此分开。最终决定使用Gradle,因为这意味着我不必修改结构,也可以将验收/集成测试分开。这对我被迫使用maven的另一个项目非常有用。另请参见。
<profiles>
<profile>
<id>acceptance-test</id>
<build>
<plugins>
<plugin>
<!-- to run directly: mvn failsafe:integration-test -P acceptance-test -->
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.12</version>
<configuration>
<testSourceDirectory>test/acceptance</testSourceDirectory>
<includes>
<include>**/*Acceptance.java</include>
</includes>
<excludes>
<exclude>**/*IT.java</exclude>
<exclude>**/*Test.java</exclude>
</excludes>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.9.1</version>
<executions>
<execution>
<id>add-test-source</id>
<phase>generate-test-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>test/unit</source>
<source>test/integration</source>
<source>test/acceptance</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12</version>
<configuration>
<testSourceDirectory>test/unit</testSourceDirectory>
</configuration>
</plugin>
<plugin>
<!-- to run directly: mvn failsafe:integration-test -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<testSourceDirectory>test/integration</testSourceDirectory>
</configuration>
<!-- execution below can be used, if tests are needed on
mvn:integration-test -->
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>