21

maven-surefire-plugin を使用し、包含と除外の両方を使用する場合、それらはどの順序で処理されますか? さらに、3 セットのテストがある場合、最初のセットは基本セット、2 番目と 3 番目は特殊なケースですが、プロファイルを使用してさらに包含/除外できますか? プロファイルの包含/除外設定はどのようにマージされますか? たとえば、次のようなことをしたいと思います。

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.12.2</version>
        <configuration>
          <excludes>
            <exclude>/org/mycompany/dataset/test/ExtractProd*.java</exclude> <!-- requires special network connectivity -->
            <exclude>/org/mycompany/dataset/test/LargeDataset*.java</exclude> <!-- requires lengthy processing -->
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <profile>
      <id>connectedToProdNetwork</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <includes>
                <include>/org/mycompany/dataset/test/ExtractProd*.java</include>
              </includes>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>runForAsLongAsYouNeed</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <includes>
                <include>/org/mycompany/dataset/test/LargeDataset*.java</include>
              </includes>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

そして、次のように実行できるようにします。

mvn package -P connectedToProdNetwork

また

mvn package -P runForAsLongAsYouNeed

また

mvn package -P connectedToProdNetwork,runForAsLongAsYouNeed

- - アップデート - - -

を使用しmvn help:effective-pom -P [profileA]て、単一のプロファイルを指定すると、結果として有効な pom が次のようになることがわかりました。

        <configuration>
          <includes>
            <include>[includeFromProfileA]</include>
          </includes>
          <excludes>
            <exclude>/org/mycompany/dataset/test/ExtractProd*.java</exclude> <!-- requires special network connectivity -->
            <exclude>/org/mycompany/dataset/test/LargeDataset*.java</exclude> <!-- requires lengthy processing -->
          </excludes>
        </configuration>

複数のプロファイルを指定すると、次のようになりますmvn help:effective-pom -P [profileA],[profileB]

        <configuration>
          <includes>
            <include>[includeFromProfileAOrBSeeminglyArbitraryChoice]</include>
          </includes>
          <excludes>
            <exclude>/org/mycompany/dataset/test/ExtractProd*.java</exclude> <!-- requires special network connectivity -->
            <exclude>/org/mycompany/dataset/test/LargeDataset*.java</exclude> <!-- requires lengthy processing -->
          </excludes>
        </configuration>

最後に、属性combine.children="append"<includes>プロファイル構成の要素に追加し、両方のプロファイルを指定すると、次のようになりますmvn help:effective-pom -P [profileA],[profileB]

        <configuration>
          <includes combine.children="append">
            <include>[includeFromProfileA]</include>
            <include>[includeFromProfileB]</include>
          </includes>
          <excludes>
            <exclude>/org/mycompany/dataset/test/ExtractProd*.java</exclude> <!-- requires special network connectivity -->
            <exclude>/org/mycompany/dataset/test/LargeDataset*.java</exclude> <!-- requires lengthy processing -->
          </excludes>
        </configuration>

しかし、各ファイルが と の両方として指定され<include><exclude>ので、どうなるでしょうか。

---- 更新 2 ----

この構成で実際にビルドを実行します。

<configuration>
  <includes>
    <include>**/TestA.java</include>
  </includes>
  <excludes>
    <exclude>**/TestA.java</exclude>
  </excludes>
</configuration>

TestAを実行しないため、 が を圧倒しているように見え<exclude>ます<include>完全を期すために、順序を逆にして<excludes>前に置きまし<includes>たが、動作は変わりませんでした。 この動作が概説されているソースコードのどこかで誰かが見つけることができれば、喜んで答えてくれるでしょう...

4

2 に答える 2

0

JUnit カテゴリを使用してみましたか?

そのアプローチを使用すると、テストにさまざまなカテゴリを指定し、クラス名ではなくそれを使用してそれらを除外/含めることができます。これは、より拡張可能なアプローチになります。

于 2015-04-09T10:16:22.377 に答える