Maven nie znajduje testów JUnit do uruchomienia


416

Mam program maven, kompiluje się dobrze. Po uruchomieniu mvn testnie uruchamia żadnych testów (pod nagłówkiem TESTY mówi There are no tests to run.).

Odtworzyłem ten problem z super prostą konfiguracją, którą przedstawię poniżej, a także dane wyjściowe po uruchomieniu -X.

Testy jednostkowe działają poprawnie w środowisku eclipse (zarówno z domyślnym pakietem junit, jak i wtedy, gdy dołączam plik junit.jar pobrany przez maven). Również mvn test-compilepoprawnie tworzy klasę w klasach testowych. Używam tego na OSX 10.6.7 z Maven 3.0.2 i java 1.6.0_24.

Oto struktura katalogów:

/my_program/pom.xml
/my_program/src/main/java/ClassUnderTest.java
/my_program/src/test/java/ClassUnderTestTests.java

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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>my_group</groupId>
    <artifactId>my_program</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>My Program</name>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <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>
        </plugins>
    </build>
</project>

ClassUnderTest.java:

public class ClassUnderTest {

    public int functionUnderTest(int n) {
        return n;
    }

}

ClassUnderTestTests.java:

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class ClassUnderTestTests {

    private ClassUnderTest o;

    @Before
    public void setUp() {
        o = new ClassUnderTest();
    }

    @Test
    public void testFunctionUnderTest_testCase1() {
        Assert.assertEquals(1, o.functionUnderTest(1));
    }

    @Test
    public void testFunctionUnderTest_testCase2() {
        Assert.assertEquals(2, o.functionUnderTest(2));
    }
}

Koniec testu mvn -X:

[DEBUG] Configuring mojo org.apache.maven.plugins:maven-surefire-plugin:2.7.1:test from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-surefire-plugin:2.7.1, parent: sun.misc.Launcher$AppClassLoader@5224ee]
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-surefire-plugin:2.7.1:test' with basic configurator -->
[DEBUG]   (s) basedir = /Users/aaron/Programs/my_program
[DEBUG]   (s) childDelegation = false
[DEBUG]   (s) classesDirectory = /Users/aaron/Programs/my_program/target/classes
[DEBUG]   (s) disableXmlReport = false
[DEBUG]   (s) enableAssertions = true
[DEBUG]   (s) forkMode = once
[DEBUG]   (s) junitArtifactName = junit:junit
[DEBUG]   (s) localRepository =        id: local
      url: file:///Users/aaron/.m2/repository/
   layout: none

[DEBUG]   (f) parallelMavenExecution = false
[DEBUG]   (s) pluginArtifactMap = {org.apache.maven.plugins:maven-surefire-plugin=org.apache.maven.plugins:maven-surefire-plugin:maven-plugin:2.7.1:, org.apache.maven.surefire:surefire-booter=org.apache.maven.surefire:surefire-booter:jar:2.7.1:compile, org.apache.maven.surefire:surefire-api=org.apache.maven.surefire:surefire-api:jar:2.7.1:compile, org.apache.maven.surefire:maven-surefire-common=org.apache.maven.surefire:maven-surefire-common:jar:2.7.1:compile, org.apache.maven.shared:maven-common-artifact-filters=org.apache.maven.shared:maven-common-artifact-filters:jar:1.3:compile, org.codehaus.plexus:plexus-utils=org.codehaus.plexus:plexus-utils:jar:2.0.5:compile, junit:junit=junit:junit:jar:3.8.1:compile, org.apache.maven.reporting:maven-reporting-api=org.apache.maven.reporting:maven-reporting-api:jar:2.0.9:compile}
[DEBUG]   (s) printSummary = true
[DEBUG]   (s) project = MavenProject: my_group:my_program:1.0-SNAPSHOT @ /Users/aaron/Programs/my_program/pom.xml
[DEBUG]   (s) projectArtifactMap = {junit:junit=junit:junit:jar:4.8.1:test}
[DEBUG]   (s) redirectTestOutputToFile = false
[DEBUG]   (s) remoteRepositories = [       id: central
      url: http://repo1.maven.org/maven2
   layout: default
snapshots: [enabled => false, update => daily]
 releases: [enabled => true, update => never]
]
[DEBUG]   (s) reportFormat = brief
[DEBUG]   (s) reportsDirectory = /Users/aaron/Programs/my_program/target/surefire-reports
[DEBUG]   (s) session = org.apache.maven.execution.MavenSession@dfbb43
[DEBUG]   (s) skip = false
[DEBUG]   (s) skipTests = false
[DEBUG]   (s) testClassesDirectory = /Users/aaron/Programs/my_program/target/test-classes
[DEBUG]   (s) testFailureIgnore = false
[DEBUG]   (s) testNGArtifactName = org.testng:testng
[DEBUG]   (s) testSourceDirectory = /Users/aaron/Programs/my_program/src/test/java
[DEBUG]   (s) trimStackTrace = true
[DEBUG]   (s) useFile = true
[DEBUG]   (s) useManifestOnlyJar = true
[DEBUG]   (s) workingDirectory = /Users/aaron/Programs/my_program
[DEBUG] -- end configuration --
[INFO] Surefire report directory: /Users/aaron/Programs/my_program/target/surefire-reports
[DEBUG] Setting system property [user.dir]=[/Users/aaron/Programs/my_program]
[DEBUG] Setting system property [localRepository]=[/Users/aaron/.m2/repository]
[DEBUG] Setting system property [basedir]=[/Users/aaron/Programs/my_program]
[DEBUG] Using JVM: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for /Users/aaron/.m2/repository
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG]   org.apache.maven.surefire:surefire-booter:jar:2.7.1:compile (selected for compile)
[DEBUG]     org.apache.maven.surefire:surefire-api:jar:2.7.1:compile (selected for compile)
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-booter/2.7.1/surefire-booter-2.7.1.jar Scope: compile
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-api/2.7.1/surefire-api-2.7.1.jar Scope: compile
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for /Users/aaron/.m2/repository
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG]   org.apache.maven.surefire:surefire-junit4:jar:2.7.1:test (selected for test)
[DEBUG]     org.apache.maven.surefire:surefire-api:jar:2.7.1:test (selected for test)
[DEBUG] Adding to surefire test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-junit4/2.7.1/surefire-junit4-2.7.1.jar Scope: test
[DEBUG] Adding to surefire test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-api/2.7.1/surefire-api-2.7.1.jar Scope: test
[DEBUG] Test Classpath :
[DEBUG]   /Users/aaron/Programs/my_program/target/test-classes
[DEBUG]   /Users/aaron/Programs/my_program/target/classes
[DEBUG]   /Users/aaron/.m2/repository/junit/junit/4.8.1/junit-4.8.1.jar
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for /Users/aaron/.m2/repository
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG]   org.apache.maven.surefire:surefire-booter:jar:2.7.1:compile (selected for compile)
[DEBUG]     org.apache.maven.surefire:surefire-api:jar:2.7.1:compile (selected for compile)
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-booter/2.7.1/surefire-booter-2.7.1.jar Scope: compile
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-api/2.7.1/surefire-api-2.7.1.jar Scope: compile
Forking command line: /bin/sh -c cd /Users/aaron/Programs/my_program && /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java -jar /Users/aaron/Programs/my_program/target/surefire/surefirebooter6118081963679415631.jar /Users/aaron/Programs/my_program/target/surefire/surefire4887918564882595612tmp /Users/aaron/Programs/my_program/target/surefire/surefire9012255138269731406tmp

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
There are no tests to run.

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.089s
[INFO] Finished at: Mon May 30 12:03:09 EDT 2011
[INFO] Final Memory: 7M/62M
[INFO] ------------------------------------------------------------------------

Odpowiedzi:


667

Domyślnie Maven używa następujących konwencji nazewnictwa podczas wyszukiwania testów do uruchomienia:

Jeśli twoja klasa testowa nie przestrzega tych konwencji, powinieneś zmienić jej nazwę lub skonfigurować wtyczkę Maven Surefire, aby używała innego wzorca dla klas testowych.


4
Uważam, że bardziej atrakcyjna jest zmiana konfiguracji maven. Ta konwencja nazewnictwa stwarza pewne zagrożenie dla niedoświadczonego użytkownika. Nazewnictwo twoich przypadków testowych jak SomethingTest1, SomethingTest2 spowodowałoby, że testy po cichu nie byłyby wykonywane. Maven nie może tego zrobić ze względu na zgodność z poprzednimi wersjami, ale zapewnia większą logikę wyszukiwania przypadków testowych we wszystkich plikach.
Tobias Kremer,

8
Nigdy o tym nie wiedziałem - miałem dwie sprawy zakończone „Testami”, a maven odmówił ich uruchomienia… zmienił się na „Test” i znów wszystko jest dobrze w gildii Lollipop. Dzięki.
demaniak

2
@Tobias Zgadzam się z twoim punktem widzenia na temat niebezpieczeństw związanych z konwencją nazewnictwa. W pewnym sensie psuje to również wzorzec wynikający z zastosowania adnotacji. Domniemany efekt użycia adnotacji polega na tym, że można przeszukiwać klasy / metody posiadające określoną adnotację. Miałem nadzieję, że Maven nie wprowadził ograniczenia konwencji nazewnictwa i zamiast tego polegał wyłącznie na skanowaniu metod z komentarzami @Test w dowolnej klasie.
Angad

2
Zauważ, że dokumentacja surefire twierdzi teraz , że **/*Tests.javajest to domyślna opcja!
Gareth,

11
Pytanie: Więc po co komentować @test, jeśli i tak musisz przestrzegać konwencji Test *?
dynex

88

Odkryłem również, że kod testu jednostkowego powinien być umieszczony w folderze testowym, nie można go rozpoznać jako klasy testowej, jeśli umieścisz go w folderze głównym. na przykład.

Źle

/my_program/src/main/java/NotTest.java

Dobrze

/my_program/src/test/java/MyTest.java

3
Dziękuję ci! To i ustawienie zakresu na test ( <scope>test<scope>) w pom.xmlpliku zrobiło to dla mnie.
dinesharjani

Wpadłem na to, uważaj na testy kontra test. Właściwy to test
Bruck Wubete,

72

Kolejna rzecz, która może spowodować, że Maven nie znajdzie testów, jeśli opakowanie modułu nie zostanie poprawnie zadeklarowane.

W ostatnim przypadku ktoś miał <packaging>pom</packaging>i moje testy nigdy się nie uruchomiły. Zmieniłem to na <packaging>jar</packaging>i teraz działa dobrze.


4
Doskonała sugestia! Demonstruje niebezpieczeństwa związane z „kopiowaniem i wklejaniem” podczas dzielenia artefaktu Maven z jednego modułu na wiele.
morsor

4
Chciałbym, żeby maven wydrukował wiadomość - package type is pom - so not running tests- aby dać wskazówki programistom :(
Arun Avanathan

60

AKTUALIZACJA:

Jak napisano w komentarzach @scottyseus, począwszy od Maven Surefire 2.22.0, wystarczy:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.1</version>
</plugin>

Podczas korzystania z JUnit 5 napotkałem ten sam problem. Maven Surefire potrzebuje wtyczki do uruchomienia testów JUnit 5. Dodaj to do naszego pom.xml:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.21.0</version>
    <dependencies>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-surefire-provider</artifactId>
            <version>1.2.0-M1</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.2.0-M1</version>
        </dependency>
    </dependencies>
</plugin>

Źródło: https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven


Dostaję komunikat „nie znaleziono” dla junit-platform-surefire-provider.
Arya Pourtabatabaie

2
Należy pamiętać, że w przypadku Surefire 2.22 nie powinno być konieczne dodawanie zależności od artefaktów surefire-providerlub jupiter-engine. Wydaje mi się, że moje testy przebiegają bez nich przynajmniej dobrze. zobacz tę odpowiedź .
scottysseus,

Warto również zauważyć, że musisz użyć org.junit.jupiter.api.Testzamiast org.junit.Testpodczas korzystania z tej wtyczki, w przeciwnym razie testy nie zostaną znalezione.
austin_ce,

30

Sprawdź również, czy katalog klas testów (np. Src / test / java) odpowiada katalogowi wymienionemu we właściwości <testSourceDirectory> w pliku pom.xml w ramach <build>właściwości. Zajęło mi to trochę czasu, aby to znaleźć.


13

Maven nie uruchomi testów, jeśli projekt je posiada <packaging>pom</packaging>

Aby testy zostały uruchomione, należy ustawić opakowanie na jar (lub inny typ artefaktu Java): <packaging>jar</packaging>


12

W moim przypadku dodałem silnik junit-vintage, który czyni go kompatybilnym ze starszymi wersjami testów JUnit i może je uruchamiać. Gdy używam JUnit 5.

<dependency>
        <groupId>org.junit.vintage</groupId>
        <artifactId>junit-vintage-engine</artifactId>
        <scope>test</scope>
</dependency>

Myślę, że SpringBoot zawiera tylko to, czego używa. Sensowne jest, że musisz określić swoje zależności zgodnie ze swoimi potrzebami. W przeciwnym razie zaimportujesz całą bibliotekę, której nie używasz.
Duc Tran

12

Wiele z tych odpowiedzi było dla mnie bardzo przydatnych w przeszłości, ale chciałbym dodać dodatkowy scenariusz, który kosztował mnie trochę czasu, ponieważ może pomóc innym w przyszłości:

Upewnij się, że klasy testowe i metody są publiczne.

Mój problem polegał na tym, że korzystałem z funkcji automatycznego generowania klas / metod testowych w moim IDE (IntelliJ) iz jakiegoś powodu stworzyłem je jako prywatne dla pakietu. Łatwiej mi to przegapić, niż można by się spodziewać.


1
Z tym też miałem problem. Z jakiegoś powodu IntelliJ tworzy testy, ponieważ pakiet prywatny i Maven ich nie widzi. Zmieniając klasę i metodę @Test na publiczną, maven wykonuje testy.
AlexC

Rozwiązałem mój problem! Pamiętaj, że nie dotyczy to JUnit 5+. Myślę, że generator kodu IntelliJ zakłada, że ​​używasz najnowszej wersji.
lamino

@lamino Używałem junit5 i to się nie powiodło, ponieważ moja metoda testowa nie była publiczna
SudhirKumar

Nieco bezczelny z IntelliJ, aby powiedzieć mi, że metody mogą być pakietowo-prywatne ..
Wecherowski

9

Sprawdź to (dla jUnit - 4.12 i wtyczki surefire Eclipse)

  1. Dodaj wymaganą wersję jUnit do POM.xml w zależnościach. Do Maven -> Zaktualizuj projekt, aby zobaczyć wymagane słoiki wyeksportowane w projekcie.
  2. Klasa testowa znajduje się w folderze src / test / java i podkatalogach tego folderu (lub folder podstawowy można określić w POM w config testSourceDirectory). Nazwa klasy powinna zawierać słowo „Test”.
  3. Metoda testowa w klasie testowej powinna mieć adnotację @Test

1
Jest to bardziej problem z konfiguracją Java, ale oprócz prawidłowego nazewnictwa klasy testowej i umieszczenia pliku testowego w katalogu testowym pod src, nazwa pakietu klasy testowej musi być zgodna z nazwą pakietu testowanej klasy.
Paul

2
@Paul False - Maven wykona wszystkie klasy zgodne z konwencją podsrc/test/java . Konwencja pakietów dotyczy struktury i umożliwia testom dostęp do metod prywatnych.
Michael K


6

Walczę z tym problemem. W moim przypadku nie importowałem właściwej adnotacji @Test .

1) Sprawdź, czy @Test pochodzi z org.junit.jupiter.api.Test (jeśli używasz Junit 5).

2) Z Junit5 zamiast @RunWith(SpringRunner.class), użyj@ExtendWith(SpringExtension.class)

import org.junit.jupiter.api.Test;

@ExtendWith(SpringExtension.class)
@SpringBootTest
@AutoConfigureMockMvc
@TestPropertySource(locations = "classpath:application.properties")    
public class CotacaoTest {
    @Test
    public void testXXX() {

    }
}

4

Jeśli masz udostępnioną aplikację Java / Groovy i wszystko, co masz, to testy jednostkowe Groovy, Maven nie znajdzie żadnych testów. Można to naprawić, dodając jeden test jednostkowy w src / test / java.


4

Miałem również podobny problem, po zbadaniu odkryłem, że przyczyną tego problemu jest zależność testowania. Po usunięciu zależności testng z pom (ponieważ już jej nie potrzebuję), zaczęła działać dobrze dla mnie.

    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>6.8</version>
        <scope>test</scope>
    </dependency>

4

Jeśli utworzyłeś Spring Bootaplikację za pomocą Spring Initializr , testy są uruchamiane poprawnie z Intellij Idea. Ale jeśli spróbujesz uruchomić testy z wiersza polecenia:

mvn clean test

Możesz być zaskoczony, że nie przeprowadzono żadnych testów. Próbowałem dodać surefire pluginbez powodzenia. Odpowiedź była prosta: pom.xmlzawierała następującą zależność:

     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
           <exclusion>
              <groupId>org.junit.vintage</groupId>
              <artifactId>junit-vintage-engine</artifactId>
           </exclusion>
        </exclusions>
     </dependency>

Wykluczenie junit-vintage-enginesłuży do zachowania zgodności z poprzednimi wersjami JUnit 4.x. Nowe wersje Spring Boot Initializr nie obsługują go domyślnie. Po usunięciu wykluczenia Mavenzacząłem oglądać testy projektu.


3

Jeśli nazwa klasy testowej nie jest zgodna ze standardową konwencją nazewnictwa (podkreśloną przez @axtavt powyżej), musisz dodać wzorzec / nazwę klasy pom.xml, aby Maven mógł wybrać test -

...
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <includes>
                    <include>**/*_UT.java</include>
                </includes>
            </configuration>
        </plugin>
    </plugins>
</build> 
...

2
/my_program/src/test/java/ClassUnderTestTests.java

Powinien być

/my_program/src/test/java/ClassUnderTestTest.java

Maven znajduje te końce testu lub rozpoczyna się od testu, aby uruchomić się automatycznie.

Możesz jednak użyć

mvn surefire:test -Dtest=ClassUnderTestTests.java 

przeprowadzić testy.


2

Oto dokładny kod, który musiałem dodać do mojego pom.xml:

    <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.21.0</version>
            <dependencies>
                <dependency>
                    <groupId>org.junit.platform</groupId>
                    <artifactId>junit-platform-surefire-provider</artifactId>
                    <version>1.2.0-M1</version>
                </dependency>
                <dependency>
                    <groupId>org.junit.jupiter</groupId>
                    <artifactId>junit-jupiter-engine</artifactId>
                    <version>5.2.0</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

A oto moje zależności:

    <dependencies>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.2.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.easytesting</groupId>
        <artifactId>fest-assert-core</artifactId>
        <version>2.0M10</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-surefire-provider</artifactId>
        <version>1.2.0-M1</version>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.2.0-M1</version>
    </dependency>
</dependencies>

2

Napotkałem ten sam problem, został rozwiązany przez poniższą zmianę w pom.xml:

<build>
    <testSourceDirectory>test</testSourceDirectory>

...

zmienić na:

<build>
    <testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>

1

Kolejny powód, dla którego nie uruchomiłem przypadków testowych, przydarzył mi się - miałem właściwość o nazwie „test” do zupełnie innych celów, ale przeszkadzało to we wtyczce surefire. Dlatego sprawdź swoje POM-y pod kątem:

<properties>
  <test>.... </test>
  ...
</properties>

i usuń to.


1

Jeszcze jedna wskazówka (oprócz poprzednich odpowiedzi):

W Eclipse przejdź do Właściwości projektu> kliknij Run/Debug Settings:

„Ta strona pozwala zarządzać konfiguracjami uruchamiania z aktualnie wybranym zasobem”

Tam możesz dodać (Nowy ...) lub usunąć (Usuń) testy JU (JUnit), które masz w swoim projekcie (w src/test/javafolderze lub kursie).


1

Jeśli napisałeś swoje testy w JUnit 4 i dodałeś zależności JUnit 5 do wtyczki surefire, twoje testy się nie uruchomią.

W takim przypadku po prostu skomentuj zależności JUnit 5 od wtyczki surefire:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19.1</version>
            <!--<dependencies>-->
                <!--<dependency>-->
                    <!--<groupId>org.junit.platform</groupId>-->
                    <!--<artifactId>junit-platform-surefire-provider</artifactId>-->
                    <!--<version>1.0.0</version>-->
                <!--</dependency>-->
                <!--<dependency>-->
                    <!--<groupId>org.junit.jupiter</groupId>-->
                    <!--<artifactId>junit-jupiter-engine</artifactId>-->
                    <!--<version>${junit.version}</version>-->
                <!--</dependency>-->
            <!--</dependencies>-->
        </plugin>

1

Poniższe działało dobrze dla mnie w Junit 5

https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven

<build>
    <plugins>
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.0</version>
        </plugin>
        <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.22.0</version>
        </plugin>
    </plugins>
</build>
<!-- ... -->
<dependencies>
    <!-- ... -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.4.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.4.0</version>
        <scope>test</scope>
    </dependency>
    <!-- ... -->
</dependencies>
<!-- ... -->

1

W moim przypadku jesteśmy aplikacją do migracji na wiele modułów do Spring Boot. Niestety maven nie wykonał już wszystkich testów w modułach. Nazwy klas testowych nie uległy zmianie, przestrzegamy konwencji nazewnictwa.

Na koniec pomogło, kiedy dodałem zależność surefire-junit47do wtyczki maven-surefire-plugin. Ale nie mogłem wyjaśnić, dlaczego to była próba i błąd:

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


1

Korzystałem z testów testowych Junit-5 z maven 3.6.2 i zawsze pokazywałem Uruchomienie testowe: 0

[

INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  8.547 s
[INFO] Finished at: 2019-12-22T00:03:37-08:00
[INFO] ------------------------------------------------------------------------

Testy Junt-5 nie działają pod linkiem maven, który uratował mi dzień.


0

junitArtifactNamemoże być tak również w przypadku, gdy używany JUnit nie jest standardem ( junit:junit), ale na przykład ...

<dependency>
    <groupId>org.eclipse.orbit</groupId>
    <artifactId>org.junit</artifactId>
    <version>4.11.0</version>
    <type>bundle</type>
    <scope>test</scope>
</dependency>

0

W przypadku, gdy ktoś szukał i nie udało mi się go rozwiązać, miałem bibliotekę do różnych testów:

<dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>${org.junit.jupiter.version}</version>
        <scope>test</scope>
    </dependency>

Kiedy zainstalowałem junit wszystko działało, mam nadzieję i pomogę w tym:

<dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>

0

użyłem tego kodu

<sourceDirectory>src_controller</sourceDirectory>
  <testSourceDirectory>src_test</testSourceDirectory>

do mojego pom.xml, po prostu upewnij się, że tam jest plik testng

<suiteXmlFile>/Users/mac/xxx/xxx/xx.xxxx.xx/xxx.restassured.xx/testng.xml</suiteXmlFile>

0

Taki problem może wystąpić, gdy używasz wtyczki surfire 3.x.x + z JUnit5 i przez pomyłkę adnotuj klasę testową za pomocą @Test adnotacją z JUnit4.

Użyj: org.junit.jupiter.api.Test(JUnit5) zamiastorg.junit.Test (Junit4)

UWAGA: może to być trudne do zauważenia, ponieważ IDE może uruchamiać te problemy bez testowania JUnit4.


0

Kolejny łatwo przeoczony problem - upewnij się, że plik twojej klasy ma rozszerzenie .java

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.