Есть ли способ пропустить только один тест в Maven? - PullRequest
54 голосов
/ 07 мая 2009

Я хотел бы пропустить только один тест при запуске mvn install.

Есть ли способ сделать это?

Ответы [ 6 ]

40 голосов
/ 13 июня 2016

Вы можете указать шаблон исключения для опции -Dtest, поставив перед ним префикс ! (восклицательный знак). Например.,

mvn -Dtest=\!FlakyTest* install

Нашел в здесь и подтвердил, что работает. Например, я смог пропустить этот тест на слабый Дженкинс, используя:

mvn -Dtest=\!CronTabTest* package
19 голосов
/ 07 мая 2009

В junit 4 я добавляю аннотацию @Ignore, когда хочу это сделать. Это будет работать для вас, если вы не хотите только иногда игнорировать тест или игнорировать его только тогда, когда сборка запускается из maven. Если это так, то я бы спросил: «Почему?»

Тесты должны быть последовательными, они должны быть переносимыми, и они должны всегда проходить. Если конкретный тест проблематичен, я бы рассмотрел его переписывание, полное удаление или перенос в другой набор тестов или проект.

7 голосов
/ 26 сентября 2013

Это нормально, что интеграционные тесты должны быть исключены, но модульные тесты должны быть включены. Для этого я предлагаю назвать все интеграционные тесты с постфиксным IntegrationTest (например, AbcIntegrationTest.java).

и затем в вашей сборке maven поместите следующее:

  <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>**/*IntegrationTest.java</exclude>
                </excludes>
            </configuration>
        </plugin>

При сборке с этим все интеграционные тесты будут исключены, но все остальные тесты (например, модульный тест) выполняются. Отлично: -)

Для получения дополнительной информации об исключении и включении тестов во время выполнения теста прочитайте

http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html

PS Чтобы исключить один единственный тест, вам просто нужно явно указать его в списке исключений. Легко.

6 голосов
/ 09 декабря 2011

Посмотрите на это решение , используя @Category аннотации

public class AccountTest {

    @Test
    @Category(IntegrationTests.class)
    public void thisTestWillTakeSomeTime() {
        ...
    }

    @Test
    @Category(IntegrationTests.class)
    public void thisTestWillTakeEvenLonger() {
        ...
    }

    @Test
    public void thisOneIsRealFast() {
        ...
    }
}

который вы затем запускаете с помощью набора тестов:

@RunWith(Categories.class)
@IncludeCategory(SlowTests.class)
@SuiteClasses( { AccountTest.class, ClientTest.class })
public class LongRunningTestSuite {}

Вы также можете включить (groups) / исключить (excludedGroups) эти тесты, используя maven для примера:

mvn -DexcludedGroups=com.mycompany.tests.IntegrationTests test
4 голосов
/ 19 мая 2009

Я думаю, что это должно работать, если использовать эту команду:

mvn archetype:create -DgroupId=test -DartifactId=test

(для теста измените pom.xml и test-class на следующее и используйте mvn install)

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>test</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>test</name>
<url>http://maven.apache.org</url>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>
                        test/AppTest.java
              </exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.5</version>
        <scope>test</scope>
    </dependency>
</dependencies>

тест-класс:

package test;
import org.junit.Test;
import static org.junit.Assert.fail;
public class AppTest 
{
    @Test
    public void test_it() {
        fail("not implemented");
    }
}
0 голосов
/ 26 октября 2018

Если вы хотите использовать CLI для исключения одного теста, вы должны использовать флаги -Dtest и -Dit.test.

Будьте внимательны, чтобы сбросить настройки по умолчанию. Когда вы используете обозначение !, все значения по умолчанию стираются, и вы должны вернуть их обратно. Для обычных тестов, выполняемых surefire, вы должны добавить *Test, Test*, *Tests, *TestCase, а для интеграционных тестов, выполненных failsafe, вы должны добавить IT*, *IT, *ITCase.

Более подробную информацию вы можете найти здесь https://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html (обычные тесты)

и здесь https://maven.apache.org/surefire/maven-failsafe-plugin/examples/inclusion-exclusion.html (интеграционные тесты)

-Dit.test='!ITsometestIT, IT*, *IT, *ITCase'

Полная команда mvn может быть такой:

mvn -e -B -Dtest='!unitTestABC, *Test, Test*, *Tests, *TestCase' -Dit.test='!ITintegrationTestABCIT, IT*, *IT, *ITCase' -DfailIfNoTests=false clean install

Не забудьте использовать ', а НЕ ". При использовании двойных кавычек любые ! внутри них будут оцениваться как bash.

Помните также, что интеграционные тесты не запускаются при mvn test. При mvn verify будут выполняться только интеграционные тесты, а не юнит-тесты

...