1

Mavenを使用した1つのプロジェクトでJunit4およびTestNGと同じ問題が発生しますが、それでも問題が発生します。junit4とtestngを使用する必要がある簡単なプロジェクトを作成しました。rootpomは次のとおりです。

    <groupId>com.dimas.testmodule</groupId>
            <artifactId>TheParent</artifactId>
            <version>0.0.001</version>
            <name>TheParent</name>
            <packaging>pom</packaging>

            <properties>
                <spring.version>3.0.5.RELEASE</spring.version>
                <spring.scope>test</spring.scope>
                <maven.surefire.plugin.version>2.9</maven.surefire.plugin.version>
            </properties>

            <dependencies>
                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>4.7</version> 
                       <scope>test</scope>
                    </dependency>
        ...etc
                </dependencies>

            <build>
                <finalName>${project.artifactId}</finalName>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>2.3.2</version>
                        <configuration>
                            <source>1.6</source>
                            <target>1.6</target>
                        </configuration>
                    </plugin>
                </plugins>
            </build>

            <profiles>
                <profile>
                    <id>default</id>
                    <activation>
                        <activeByDefault>true</activeByDefault>
                    </activation>
                    <modules>
                        <module>JUnitOnly</module>
                        <module>TestNGOnly</module>
                        <module>testmodule</module>
                    </modules>
                    <build>
                        <plugins>
                            <plugin>
                                <groupId>org.apache.maven.plugins</groupId>
                                <artifactId>maven-surefire-plugin</artifactId>
                                <version>${maven.surefire.plugin.version}</version>
                                <configuration>
                                    <redirectTestOutputToFile>false</redirectTestOutputToFile>
<excludes>
                                <exclude>**/*NGTest.java</exclude>
                            </excludes>
                                </configuration>
                            </plugin>
                        </plugins>
                    </build>
                </profile>

                <profile>
                    <id>testNGonly</id>
                    <modules>
                        <module>JUnitOnly</module>
                        <module>TestNGOnly</module>
                        <module>testmodule</module>
                    </modules>

                    <build>
                        <plugins>
                            <plugin>
                                <groupId>org.apache.maven.plugins</groupId>
                                <artifactId>maven-surefire-plugin</artifactId>
                                <version>${maven.surefire.plugin.version}</version>
                                <configuration>
                                    <redirectTestOutputToFile>false</redirectTestOutputToFile>
                                    <includes>
                                        <include>**/*NGTest.java</include>
                                    </includes>
                                </configuration>
                            </plugin>
                        </plugins>
                    </build>
                </profile>
            </profiles>

モジュールJUnitOnlyとTestModuleは、プロパティを継承するだけで、上書きしません。そしてここにTestNgOnlyがあります

<groupId>com.dimas.testmodule.testngonly</groupId>
    <artifactId>TestNGOnly</artifactId>
    <version>0.0.001</version>
    <name>testngonly</name>
    <parent>
        <groupId>com.dimas.testmodule</groupId>
        <artifactId>TheParent</artifactId>
        <version>0.0.001</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.3.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <profiles>
        <profile>
            <id>testNGtest</id>  
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>${maven.surefire.plugin.version}</version>
                        <configuration>
                            <redirectTestOutputToFile>false</redirectTestOutputToFile>
                            <suiteXmlFiles>
                                <suiteXmlFile>
                                    <!--test/resources/my-testng.xml-->
                                    src\test\resources\my-testng.xml
                                </suiteXmlFile>
                            </suiteXmlFiles>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

デフォルトプロファイルのtestngテストを無視し、プロファイルtestNGOnlyのtestngテストのみを起動する必要があります。

4

1 に答える 1

1

3つのモジュールがあります- junit、、testngおよびmixed

デフォルトのプロファイルは、junitテストのみを実行する必要があります。つまり、junitモジュールを実行し、モジュールのjunitテストを実行しmixedます。 testNGプロファイルは、testNGテストのみを実行する必要があります。つまり、testNGモジュールを実行し、モジュールのtestNGテストを実行しmixedます。

プロファイルがMavenで機能する方法ではexclude、プロファイル内のモジュールを使用することはできません。ただし、不要なモジュールを作成する必要はありません。

したがって、デフォルトのプロファイルには、モジュールjunitとがありますmixed

testNGプロファイルで、モジュールを追加しますtestNG

Mavenのベストプラクティスに従って、<dependencies>内の親pomで定義します<dependencyManagement>。これにより、モジュールではjunit依存関係、junitモジュールではtestNG依存関係のみを使用できtestNGます。

3つのモジュールにまたがる構成については何も共通してsurefireいないため、親pomで指定する必要はありません。

プロファイルでjunitテストを実行する必要がないため、モジュールのプロファイルにtestNGプラグイン構成を追加skipTestsします。testNGjunit

関連するSOの質問について、この回答mixedのヒントを使用してpomを構成します。surefireはプロファイルに基づいてjunitまたはtestngrunnerを使用する必要があるため、これは注意が必要です。

上記の提案をサンプルプロジェクトに組み込んでいます

于 2012-06-13T10:42:29.997 に答える