2009-08-06 2 views
4

Чтобы запустить их вместе, доступно несколько вариантов, но я выбрал различные профили для Junit и TestNG. Но теперь проблема заключается в исключении и включении тестовых примеров.Junit4 и TestNG в одном проекте с Maven

Поскольку, если мы добавим зависимость testNG к основному проекту в maven, он пропустит все Junit, я решил поместить его в отдельный профиль. Поэтому я исключаю TestNG тесты по умолчанию (основной) профиль из компиляции, используя следующую запись в pom.xml:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.0.2</version> 
     <configuration> 
     <source>1.5</source> 
     <target>1.5</target> 
     <testExcludes> 
      <testExclude>**/tests/**.*</testExclude> 
      <testExclude>**/tests/utils/**.*</testExclude> 
     </testExcludes> 
    </configuration> 
</plugin> 

и то же самое для плагина верный. Таким образом, он отлично работает с основным профилем и выполняет только тесты Junit4. Но когда я использую профиль testNG, он не будет выполнять тест testNG, даже если он не скомпилирует их. Я использую следующий профиль для их выполнения.

<profile> 
    <id>testNG</id> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.5</source> 
        <target>1.5</target> 
        <testIncludes> 
         <testInclude>**/tests/**.java</testInclude> 
         <testInclude>**/tests/utils/**.*</testInclude> 
        </testIncludes> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <configuration> 
        <skip>false</skip> 
        <includes> 
         <include>**/**.class</include> 
         <include>**/tests/utils/**.class</include> 
        </includes> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
    <dependencies> 
     <dependency> 
      <groupId>org.testng</groupId> 
      <artifactId>testng</artifactId> 
      <version>5.8</version> 
      <scope>test</scope> 
      <classifier>jdk15</classifier> 
     </dependency> 
    </dependencies> 
</profile> 

У кого-нибудь есть идея, почему он не включает их и не скомпилирует?

+0

возможно дубликат [Как выполнить JUnit и TestNG тесты в одном проекте с использованием Maven-безошибочный-плагин?] (Http://stackoverflow.com/questions/1232853/how-to-execute-junit-and -testng-tests-in-same-project-using-maven-surefire-plugi) – MariuszS

ответ

4

Конфигурация для плагина компилятора исключает типы TestNG. Конфигурация из профиля объединяется с конфигурацией по умолчанию, так что ваша эффективная конфигурация компилятор:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
    <source>1.5</source> 
    <target>1.5</target> 
    <testIncludes> 
     <testInclude>**/tests/**.java</testInclude> 
     <testInclude>**/tests/utils/**.*</testInclude> 
    </testIncludes> 
    <testExcludes> 
     <testExclude>**/tests/**.*</testExclude> 
     <testExclude>**/tests/utils/**.*</testExclude> 
    </testExcludes> 
    </configuration> 
</plugin> 

Это означает, что ваши типы TestNG не всегда компилируются и, следовательно, не выполняются.

Если вы укажете, что раздел < не включает раздел в профиле testNG, он переопределит исключение по умолчанию, и ваши типы TestNG будут скомпилированы и запущены. Я не могу вспомнить, будет ли он работать с пустым тегом исключений (т. Е. < исключает/>), вам может потребоваться указать что-то вроде этого, чтобы обеспечить переопределение конфигурации по умолчанию.

<testExcludes> 
     <testExclude>dummy</testExclude> 
    </testExcludes> 
+0

Большое спасибо, я очень ценю вашу помощь. Ты спас мне часы времени! Я смотрел вокруг этого с утра. Даже попытался создать разные профили для обоих и всех. Я не знал о том, что maven использует конфигурацию по умолчанию, и нам нужно переопределить это. Большое спасибо. – ravinikam

+0

Добро пожаловать.Стоит отметить, что в общем случае вы можете запускать ** mvn help: effective-pom ** (и добавлять любые профили с -P как обычно), вы можете увидеть результирующий POM, который показал бы объединенную конфигурацию компилятора. –

0

Простейшее решение, как этот

<plugin> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>${surefire.version}</version> 
    <dependencies> 
     <dependency> 
      <groupId>org.apache.maven.surefire</groupId> 
      <artifactId>surefire-junit47</artifactId> 
      <version>${surefire.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.maven.surefire</groupId> 
      <artifactId>surefire-testng</artifactId> 
      <version>${surefire.version}</version> 
     </dependency> 
    </dependencies> 
</plugin> 

Больше информации об этом: Mixing TestNG and JUnit tests in one Maven module – 2013 edition

0

я не нашел никакого совместного решения на сайте как безошибочный и надежен. Файл POM меняется ниже, работал для меня.

  • Трюк Surefire выполняется путем явного указания дочернего плагина как для JUnit, так и для TestNG.
  • Трюк Failsafe выполняется путем определения двух исполнений, каждый из которых имеет пустую конфигурацию, одну для JUnit, а другую для TestNG.

Оба решения - это хаки, которые я нашел в Интернете. Я думаю, что ссылка на трюк Surefire находится в другом ответе на этот вопрос.

<plugins> 
<plugin> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>${surefire.version}</version> 
    <dependencies> 
     <dependency> 
      <groupId>org.apache.maven.surefire</groupId> 
      <artifactId>surefire-junit47</artifactId> 
      <version>${surefire.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.maven.surefire</groupId> 
      <artifactId>surefire-testng</artifactId> 
      <version>${surefire.version}</version> 
     </dependency> 
    </dependencies> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-failsafe-plugin</artifactId> 
    <version>${failsafe.version}</version> 
    <executions> 
     <execution> 
      <id>test-testng</id> 
      <goals> 
       <goal>integration-test</goal> 
       <goal>verify</goal> 
      </goals> 
      <configuration> 
       <testNGArtifactName>none:none</testNGArtifactName> 
      </configuration> 
     </execution> 
     <execution> 
      <id>test-junit</id> 
      <goals> 
       <goal>integration-test</goal> 
       <goal>verify</goal> 
      </goals> 
      <configuration> 
       <junitArtifactName>none:none</junitArtifactName> 
      </configuration> 
     </execution> 
    </executions> 
</plugin>   
<!-- ... --> 
</plugins> 
Смежные вопросы