Junit4 и TestNG в одном проекте с Maven с наследованием

У меня та же проблема, что и у Junit4 и TestNG в одном проекте с Maven но у меня все еще есть проблемы. Я создал простой проект, в котором мне нужно использовать junit4 и testng Вот root pom:

    <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 для профиля по умолчанию и запускать только тесты testng для профиля testNGOnly.


person Dmitrii Borovoi    schedule 13.06.2012    source источник
comment
Что issues у вас есть? тесты testng выполняются в testmodule для профиля default? Или тесты запущены в testNGOnly? Если последнее, зачем включать этот модуль в профиль default?   -  person Raghuram    schedule 13.06.2012
comment
testmodule - содержит тесты junit и testng. Модуль TestNgOnly продолжает только тесты testng. Модуль Junit содержит только тесты junit. Когда я запускаю профиль tetsNGOnly, должны запускаться только тесты testng. При запуске глухого профиля должны быть запущены только тесты junit.   -  person Dmitrii Borovoi    schedule 13.06.2012
comment
Я создал скелетный многомодульный проект, иллюстрирующий этот вариант использования, здесь. Посмотрите, решит ли это вашу проблему. Если да, то я могу подробно изложить это в качестве ответа.   -  person Raghuram    schedule 13.06.2012
comment
Большое спасибо. Похоже, это то, что мне нужно. Я просто добавляю конфигурацию ›‹source› 1.6 ‹/source› ‹target› 1.6 ‹/target› ‹/configuration› в ваш код и все начинает работать!   -  person Dmitrii Borovoi    schedule 13.06.2012


Ответы (1)


Есть три модуля - junit, testng и mixed.

Профиль по умолчанию должен выполнять только тесты junit, то есть запускать модуль junit и запускать тесты модуля mixed. Профиль testNG должен выполнять только тесты testNG, т.е. запускать модуль testNG и запускать тесты модуля testNG mixed.

Профили работают в maven, exclude модуль в профиле невозможен. Однако нет необходимости создавать ненужный модуль.

Таким образом, в профиле по умолчанию есть модули junit и mixed.

В профиле testNG добавьте модуль testNG.

Следуя рекомендациям maven, определите <dependencies> в родительском pom внутри <dependencyManagement>. Это позволяет нам использовать только зависимость junit в модуле junit и зависимость testNG в модуле testNG.

В конфигурации surefire трех модулей нет ничего общего, и поэтому не требуется указывать ее в родительском pom.

Поскольку запускать тесты junit в профиле testNG не требуется, добавьте конфигурацию плагина в skipTests в профиле testNG для модуля junit.

Настройте mixed pom с помощью подсказки в этом ответе для связанный SO-вопрос. Это становится непросто, поскольку surefire необходимо использовать junit или testng runner в зависимости от профиля.

Я включил приведенные выше предложения в образец проекта, здесь.

person Raghuram    schedule 13.06.2012