Запуск набора тестов JUnit4 в Maven с использованием maven-failsafe-plugin

#maven #junit4 #maven-failsafe-plugin

#maven #junit4 #maven-failsafe-plugin

Вопрос:

У меня есть набор тестов JUnit 4, который содержит несколько тестовых классов в том порядке, в котором они должны быть запущены (наши интеграционные тесты должны выполняться в определенном порядке).

Если я использую maven-failsafe-plugin без какой-либо настройки, он запустит тест, но не в правильном порядке. Однако, если я настрою плагин для запуска набора тестов, тесты не будут выполняться.

Можно ли запустить набор тестов с помощью плагина failsafe? если да, то где я ошибся!!

Код приведен ниже:

 @RunWith(Suite.class)
@SuiteClasses({ 
    TestCase1.class,
    TestCase2.class, 
       ...
    TestCaseN.class,
})
public class IntegrationSuite {
    //Do Nothing.
}
  

и из pom.xml:

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.9</version>
    <configuration>
        <includes>
            <include>IntegrationSuite.java</include>
        </includes>
    </configuration>
    <executions>
        <execution>
            <id>integration-test</id>
            <goals>
                <goal>integration-test</goal>
            </goals>
    </execution>
    <execution>
        <id>verify</id>
        <goals>
            <goal>verify</goal>
        </goals>
    </execution>
</executions>
</plugin>
  

Спасибо 🙂

Ответ №1:

Плагин Failsafe поддерживает параметр runOrder (click) начиная с версии 2.7 (совсем недавно). Вариантов не так много, вы не можете указать порядок явно, но вы можете установить для него значение «алфавитный» и переименовать свои тестовые классы в соответствии с порядком выполнения.

Могу ли я также сказать по этому поводу, что тот факт, что тесты зависят друг от друга, — это (тестовый) запах кода; это нехорошо, поскольку это короткий путь к разработке недостижимого набора тестов и, наконец, отказ от него, когда его сложность взлетает выше человеческого понимания. Кроме того, он может не выявить ошибки, поскольку это результат одного выбранного пути выполнения.

Кстати, я предпочитаю включать подобные тесты с двойной звездочкой:

 <includes>
     <include>**/IntegrationSuite.java</include>
</includes>
  

Комментарии:

1. Спасибо за ваш ответ! Сами тесты не зависят друг от друга при запуске, однако порядок их выполнения определяется документом, в котором подробно описаны тесты… не мое решение, но я все равно должен его реализовать!!

2. @HeavyMetalKid Теперь, когда я думаю об этом, основываясь на том, как Surefire / Failsafe находит тестовые примеры, наборы, вероятно, не поддерживаются. Однако я не могу привести убедительные доказательства.

3. Из того, что я прочитал, пока искал ответ на этот вопрос, я думаю, что вы, возможно, правы. Вместо этого я попробую вашу идею runOrder alphabetical naming. Спасибо

4. К вашему сведению: runOrder-failedfirst поддерживается только с отказоустойчивой версии 2.11

Ответ №2:

maven-surefire-plugin также можно использовать как приведенный ниже код:

 <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<includes>
<include>**/IntegrationSuite.java</include>
</includes>
</configuration>
</plugin>