Zapobiegaj testom jednostkowym, ale Zezwalaj na testy integracyjne w Maven

Mam kompilację Mavena, w której używam wtyczki SureFire do uruchamiania testów jednostkowych, a wtyczka FailSafe do uruchamiania testów integracyjnych. Chciałbym sposób, aby uruchomić tylko FailSafe plugin testów.

Nie jest dla mnie dobrym rozwiązaniem dodawanie różnych profili lub czegokolwiek w pom, ponieważ jest to budowa wielomodułowa i nie chcę edytować każdego modułu pom.

Istnieją skip.tests i maven.test.skip i skipTests, które zatrzymują wszystkie testy, oraz skipITs, co się zatrzymuje tylko wtyczka failsafe.

Więc, czy istnieje flaga wiersza poleceń dla Mavena jak skipITs, ale zamiast tego z funkcjonalnością "onlyITs"?

Author: Lii, 2011-07-07

6 answers

Znalazłem najprostszy sposób, aby pominąć tylko testy surefire jest skonfigurować surefire (ale nie failsafe) w następujący sposób:

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.14</version>
    <configuration>
        <!-- skips surefire tests without skipping failsafe tests.
                 Property value seems to magically default to false -->
        <skipTests>${skip.surefire.tests}</skipTests>
    </configuration>
</plugin>

To pozwala na uruchomienie mvn verify -Dskip.surefire.tests i tylko surefire, a nie failsafe, testy zostaną pominięte; uruchomi również wszystkie inne niezbędne fazy, w tym przed integracją i po integracji, a także uruchomi verify cel, który jest wymagany do faktycznie fail your Maven build jeśli testy integracyjne zawiodą.

Zauważ, że to na nowo definiuje właściwość używana do określenia, że testy powinny być pomijane, więc jeśli podasz canonical -DskipTests=true, surefire zignoruje ją, ale failsafe będzie ją respektować, co może być nieoczekiwane, zwłaszcza jeśli masz już buildy / użytkowników określających tę flagę. Proste obejście wydaje się być domyślne skip.surefire.tests na wartość skipTests w sekcji <properties> pom:

<properties>
    <skip.surefire.tests>${skipTests}</skip.surefire.tests>
</properties>

Jeśli potrzebujesz, możesz podać analagous parametr o nazwie skip.failsafe.tests dla failsafe, jednak nie znalazłem go koniecznego - ponieważ testy jednostkowe zazwyczaj uruchamiane są we wcześniejszej fazie i jeśli chcę uruchamiać testy jednostkowe, ale nie testy integracyjne, uruchamiam fazę test zamiast fazy verify. Twoje doświadczenia mogą się różnić!

Te właściwości skip.(surefire|failsafe).tests powinny być prawdopodobnie zintegrowane z samym kodem surefire/failsafe, ale nie jestem pewien, jak bardzo naruszałoby to etos" są dokładnie tą samą wtyczką, z wyjątkiem 1 małej różnicy".

 130
Author: bacar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-30 12:22:45

Obejściem byłoby wywołanie:

mvn clean test-compile failsafe:integration-test
Co prawda, to jest brzydkie, ale może rozwiązać twój problem.

Lub (inny hack):

mvn clean integration-test -Dtest=SomePatternThatDoesntMatchAnything -DfailIfNoTests=false

Numer referencyjny:

 99
Author: Sean Patrick Floyd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-07 14:53:57

Używam kodu z Antonio Goncalves Blog , który działa idealnie.

Możesz użyć następujących właściwości:

-DskipUTs=true do pomijania testów surefire.

-DskipITs=true do pomijania testów failsafe.

-DskipTests=true za pominięcie wszystkich testów.

pom.xml jest następująca:

<properties>
    <skipTests>false</skipTests>
    <skipITs>${skipTests}</skipITs>
    <skipUTs>${skipTests}</skipUTs>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19.1</version>
            <configuration>
                <skipTests>${skipUTs}</skipTests>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.19.1</version>
            <executions>
                <execution>
                    <id>run-integration-tests</id>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <skipTests>${skipTests}</skipTests>
                <skipITs>${skipITs}</skipITs>
            </configuration>
        </plugin>
    </plugins>
</build>
 44
Author: Martijn Burger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-22 12:21:59

Mam nadzieję, że to pomoże!

Spróbuj uruchomić test tylko z FailSafe (plugin do integracji-test-domyślnie pozwoli Ci uruchamiać tylko testy integracyjne z tego typu nazwami: * /IT .java, * * / IT.java, * / * ITCase.java;, ale można to łatwo zmienić z pliku pom)

mvn failsafe:integration-test

I gdy chcesz używać tylko SureFire (plugin do testowania jednostek)

mvn surefire:test

Lub jeden test na raz z:

mvn -Dtest=MyUnitlTest
 16
Author: Kati Holasz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-01 15:32:16

Lubię to, więc każda faza jest normalnie wykonywana:

 mvn -Dtest=foo -DfailIfNoTests=false verify
 5
Author: Jérôme Herry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-28 11:19:07

Spróbuj uruchomić integrację lub testy jednostkowe w osobnym profilu. Następnie możesz po prostu włączyć / wyłączyć profil.

 0
Author: Steven,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-08 00:00:11