Сейчас у меня есть оба типа тестов, но когда я говорю "mvn test", он выполняет тесты TestNG, а не Junit. Я хочу выполнить как один за другим. Любая идея?
Как выполнить тесты JUnit и TestNG в одном проекте с помощью maven-surefire-plugin?
Ответ 1
Существует открытая проблема для, поэтому нет элегантного способа сделать это.
Было бы намного проще выбрать рамку и придерживаться ее.
Изменить: мой предыдущий ответ не работает, потому что вы не можете указывать зависимости в выполнении. Я пробовал несколько подходов, но лучше всего я могу создать профиль для зависимости TestNG, чтобы вы могли переключаться между тестированием TestNG и JUnit, похоже, нет средств для запуска тестов TestNG и Junit 4.
Еще одно замечание: вы можете запустить тесты JUnit из TestNG, но я думаю, что это работает только для тестов JUnit 3.
Ответ 2
Официальный способ с выбором поставщиков.
Вы также можете указать несколько поставщиков в качестве зависимостей, и все они будут запущены и создадут общий отчет. Это может быть особенно полезно для внешних поставщиков, поскольку для объединения включенных провайдеров существует несколько вариантов использования.
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.18.1</version>
</dependency>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-testng</artifactId>
<version>2.18.1</version>
</dependency>
</dependencies>
</plugin>
Подробнее об этом: Смешивание тестов TestNG и JUnit в одном модуле Maven - версия 2013 г.
Ответ 3
У меня есть лучшее решение.
Идея состоит в том, чтобы создать два исполнения maven-surefire-plugin
, один для JUnit, один для TestNG. Вы можете отключить один из TestNG или JUnit за выполнение, указав несуществующие junitArtifactName
или testNGArtifactName
:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<testNGArtifactName>none:none</testNGArtifactName>
</configuration>
</execution>
<execution>
<id>test-testng</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<junitArtifactName>none:none</junitArtifactName>
</configuration>
</execution>
</executions>
</plugin>
Ответ 4
Для этого есть другой выход. Вы можете попросить TestNG также запустить тестовые примеры Junit. Ниже приведен пример testng.xml для запуска всех тестовых примеров
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="TestAll">
<test name="junitTestCases" junit="true">
<packages>
<package name="com.test.*" />
</packages>
</test>
<test name="testNGTestCases" >
<packages>
<package name="com.test.*" />
</packages>
</test>
</suite>
Ответ 5
Благодаря этой ссылке (http://jira.codehaus.org/browse/SUREFIRE-377), это решение моей предыдущей проблемы (с 3 исполнением вместо 2)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.10</version>
<configuration>
<testNGArtifactName>none:none</testNGArtifactName>
</configuration>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<junitArtifactName>none:none</junitArtifactName>
<testNGArtifactName>org.testng:testng</testNGArtifactName>
</configuration>
</execution>
</executions>
</plugin>
Ответ 6
Я обнаружил, что решение заключалось в том, чтобы заставить плагин надежного огня использовать JUnit. Я сделал это, переопределив плагин surefire в конкретном проекте следующим образом. Зависимости вынуждают использовать JUnit.
<build>
<plugins>
<!-- force sure fire to use junit instead of testng -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.10</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.10</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
Ответ 7
На основе предыдущих решений. Я нашел, что это сработало лучше всего для нас. Еще одна проблема, с которой мы столкнулись, - TestNG, пытающаяся запустить старые тесты JUnit. Мы избегали этого, назвав все тесты TestNG по-разному (например, * TestNG.java). Ниже приведена конфигурация с двумя исполнениями верного плагина.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<testNGArtifactName>none:none</testNGArtifactName>
<excludes>
<exclude>**/*TestNG.java</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>test-testng</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<junitArtifactName>none:none</junitArtifactName>
<testNGArtifactName>org.testng:testng</testNGArtifactName>
<includes>
<include>**/*TestNG.java</include>
</includes>
<excludes>
<exclude>**/*Test.java</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>
Ответ 8
Я нашел решение для запуска обоих тестовых типов с TestNG без изменения конфигурации инструмента сборки.
Я тестировал с помощью Gradle, но должен работать с Maven тоже.
Обратите внимание, что это будет запускать тесты JUnit внутри TestNG, но не наоборот.
Хитрость заключается в использовании аннотаций обеих фреймворков в тестовых классах и использовании утверждений TestNG для совместимости с JUnit.
import static org.testng.AssertJUnit.*;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
@org.testng.annotations.Test
public final class ApplicationTest {
@org.testng.annotations.BeforeClass
@BeforeClass
public static void setup () {}
@org.testng.annotations.AfterClass
@AfterClass
public static void cleanup () {}
@Test public void json () throws IOException {
assertTrue (true);
}
}
Используя этот хак, вы можете легко запускать существующие тесты JUnit с помощью TestNG, помогая вам переносить их, когда позволяет время.
Надеюсь, что это поможет!
Ответ 9
Для JUnit ---
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.19.1</version>
</dependency>
</dependencies>
Аналогичным образом используйте зависимость для TestNG, если требуется
Ответ 10
если вы просто укажете провайдера testng, он будет запускать как тесты junit, так и тесты testng всего один раз.
поэтому нет никаких ограничений на именование тестов.
версии плагина:
surefire-plugin 2.16 (junit47 и testng провайдеры обе версии установлены в 2.16)
testng зависимость 6.8.7
junit dependency 4.7
Ответ 11
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<!-- ********* Skip Test for Success BUILD ******** -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.10</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<!-- *********************************************** -->
</plugins>
</build>
<profiles>
<!-- ********** Profiles for run test cases ************ -->
<!-- Profile for run JUnit test dependent tests -->
<profile>
<id>junit-tests</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.10</version>
<configuration>
<skip>false</skip>
</configuration>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.10</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</profile>
<!-- Profile for run TestNG dependent tests -->
<profile>
<id>testNG-tests</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.10</version>
<configuration>
<skip>false</skip>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<!-- ***************************************************** -->
</profiles>
Вместо запуска: mvn test -Pjunit-tests (для теста на запуск на основе junit) или тест mvn -PtestNG-тесты (для теста TestNG).
Ответ 12
для Junit это решило мою проблему
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.19.1</version>
</dependency>
</dependencies>