2012-06-13 3 views
1

У меня такая же проблема, как и у Junit4 and TestNG in one project with Maven, но у меня все еще есть проблемы. Я создал простой проект, где мне нужно использовать junit4 и TestNG Вот корень П:Junit4 и TestNG в одном проекте с Maven с наследованием

<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 просто наследуется и не overrite каких-либо свойств. А вот 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.

+0

Какие 'вопросы' у вас есть? Тесты testng работают в 'testmodule' для профиля' default'? Или тесты выполняются в 'testNGOnly'? Если последний, почему этот модуль включен в профиль 'default'? – Raghuram

+0

testmodule - содержит и тесты junit и testng. Модуль TestNgOnly содержит только тесты testng. Модуль Junit содержит только тесты junit. Когда я запускаю tetsNGOnly, должны запускаться только тесты testng. Когда я начинаю профиль глухоты, должны запускаться только тесты юнита. –

+1

Я создал скелетный многомодульный проект, иллюстрирующий этот прецедент [здесь] (https://github.com/maruhgar/mvn-examples/tree/master/mixtestsmultimodule). Посмотрите, решит ли это вашу проблему. Я могу подробно описать это как ответ, если да. – Raghuram

ответ

1

Существует три модуля - junit, testng и mixed.

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

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

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

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

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

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

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

Конфигурирование mixed pom с использованием наконечника в this answer для related Вопрос. Это становится сложно, так как surefire должен использовать junit или testng runner на основе профиля.

Я включил вышеуказанные предложения в примерный проект here.

Смежные вопросы