Maven Surefire与不同的文件集

时间:2011-08-25 15:24:19

标签: java testing maven

我有两种单元测试(不是集成测试)。由于Spring Security的一些奇怪行为,我需要先运行所有正常测试,然后再运行安全测试。

我正在使用Junit(因此我无法使用任何TestNG组)。

所以我所做的是指定两组包含并排除规则。

<excludes>
   <exclude>**/*SecurityTest.java</exclude>                  
</excludes>
<includes>
   <include>**/*Test.java</include>
   <include>**/*Tests.java</include>
</includes>

<excludes>
</excludes>
<includes>
    <include>**/*SecurityTest.java</include>
</includes>

如果我用手在我的手机中更换它们,那么我可以进行正常或安全测试。但是我当然希望在每次构建中运行这两种测试。

我的第一次尝试是有两个完整的maven-surefire-plugin配置。但是后来maven只考虑了他们中的最后一个。

我的下一个尝试是使用两个execution定义,但是然后看起来似乎忽略了规则并且混合了两种测试。

所以我的一般问题是如何为maven surefire指定两个文件集,以便它们将逐个执行?更具体地说明如何指定两个不同的文件集。


执行配置

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.9</version>
    <configuration>
        <junitArtifactName>junit:junit</junitArtifactName>
        <encoding>UTF-8</encoding>
        <inputEncoding>UTF-8</inputEncoding>
        <outputEncoding>UTF-8</outputEncoding>
        <argLine>-Xms256m -Xmx512m -XX:MaxPermSize=128m -ea</argLine>   
    </configuration>

    <executions>
        <execution>
            <id>normal-tests</id>
            <phase>test</phase>
            <goals>
                <goal>test</goal>
            </goals>
            <configuration>
                <excludes>
                    <exclude>**/Abstract*.java</exclude>
                    <exclude>**/*_Roo_*</exclude>
                    <exclude>**/*SecurityTest.java</exclude>
                </excludes>
                <includes>
                    <include>**/*Test.java</include>
                    <include>**/*Tests.java</include>
                </includes>
            </configuration>
        </execution>
        <execution>
            <id>security-tests</id>
            <phase>test</phase>
            <goals>
                <goal>test</goal>
            </goals>
            <configuration>
                <excludes>
                    <exclude>**/Abstract*.java</exclude>
                    <exclude>**/*_Roo_*</exclude>
                </excludes>
                <includes>
                    <include>**/*SecurityTest.java</include>
                </includes>
            </configuration>
        </execution>
    </executions>
</plugin>

1 个答案:

答案 0 :(得分:8)

您没有更改绑定到superpom中测试阶段的默认surefire执行,因此它仍然以其默认配置运行。该执行的id是“default-test”。您需要覆盖它以将其从测试阶段解除绑定,否则只需将该ID用于您自己的一个执行。