Maven non trova i test JUnit da eseguire


416

Ho un programma maven, si compila bene. Quando mvn testeseguo non esegue alcun test (sotto l'intestazione TEST dice There are no tests to run.).

Ho ricreato questo problema con un'installazione semplicissima che includerò di seguito e l'output con cui eseguirò -X.

I test unitari funzionano bene da eclipse (sia con il suo pacchetto junit predefinito che quando invece includo junit.jar scaricato da Maven). Inoltre mvn test-compilecrea correttamente la classe nelle classi di test. Sto eseguendo questo su OSX 10.6.7 con Maven 3.0.2 e Java 1.6.0_24.

Ecco la struttura delle directory:

/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));
    }
}

Fine del test 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] ------------------------------------------------------------------------

Risposte:


667

Per impostazione predefinita, Maven utilizza le seguenti convenzioni di denominazione quando cerca i test da eseguire:

Se la tua classe di test non segue queste convenzioni, dovresti rinominarla o configurare Maven Surefire Plugin per utilizzare un altro modello per le classi di test.


4
Trovo più attraente cambiare la configurazione del Maven. Questa convenzione di denominazione rappresenta un pericolo per l'utente inesperto. Assegnando un nome ai test come SomethingTest1, SomethingTest2 comporterebbe l'esecuzione silenziosa dei test. Maven non può farlo per compatibilità con le versioni precedenti, ma crea più logica per cercare test in tutti i file.
Tobias Kremer,

8
Non l'ho mai saputo - ho avuto due casi che si sono conclusi con "Test", e la maven ha rifiutato di eseguirli ... è stata cambiata in "Test", e tutto va di nuovo bene nella gilda dei lecca-lecca. Grazie.
demaniak,

2
@Tobias Concordo con il tuo punto sul pericolo imposto dalla convenzione di denominazione. In qualche modo interrompe anche il modello implicito nell'uso delle annotazioni. Un risultato implicito dell'uso delle annotazioni è che è possibile cercare classi / metodi con un'annotazione specifica. Speravo che Maven non avesse messo in atto la limitazione della convenzione di denominazione e si fosse invece affidato solo alla scansione dei metodi annotati @Test in qualsiasi classe.
Angad,

2
Nota che la documentazione di surefire ora afferma che **/*Tests.javaè un'inclusione predefinita!
Gareth

11
Domanda: allora perché annotare con @test se si deve comunque seguire la convenzione Test *?
dynex

88

Ho anche scoperto che il codice unit test dovrebbe essere inserito nella cartella test, non può essere riconosciuto come classe test se lo metti nella cartella principale. per esempio.

Sbagliato

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

Giusto

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

3
Grazie! Questo e l'impostazione dell'ambito su test ( <scope>test<scope>) nel pom.xmlfile lo ha fatto per me.
Dinesharjani,

Mi sono imbattuto in questo, attento ai test vs test. Quello corretto è il test
Bruck Wubete, l'

72

Un'altra cosa che può far sì che Maven non trovi i test se la confezione del modulo non viene dichiarata correttamente.

In un caso recente, qualcuno ha avuto <packaging>pom</packaging>e i miei test non sono mai stati eseguiti. L'ho cambiato in <packaging>jar</packaging>e ora funziona benissimo.


4
Suggerimento eccellente! Dimostra i pericoli di 'copia-incolla' quando si divide un artefatto Maven a modulo singolo in multiplo.
morsor

4
Vorrei che Mavven avesse stampato un messaggio - package type is pom - so not running tests- per dare qualche indizio agli sviluppatori :(
Arun Avanathan

60

AGGIORNARE:

Come ha detto @scottyseus nei commenti, a partire da Maven Surefire 2.22.0 è sufficiente quanto segue:

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

Quando si utilizza JUnit 5, ho riscontrato lo stesso problema. Maven Surefire ha bisogno di un plugin per eseguire i test JUnit 5. Aggiungi questo al nostro 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>

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


Sto ottenendo un "non trovato" per junit-platform-surefire-provider.
Arya Pourtabatabaie,

2
Si noti che con Surefire 2.22, non dovrebbe essere necessario aggiungere dipendenze dagli artefatti surefire-providero jupiter-engine. I miei test sembrano funzionare bene senza di loro, almeno. vedi questa risposta .
scottysseus,

Vale anche la pena notare che è necessario utilizzare org.junit.jupiter.api.Testanziché org.junit.Testutilizzare questo plug-in altrimenti i test non saranno trovati.
austin_ce,

30

Inoltre, controlla se la directory delle classi di test (ad es. Src / test / java) corrisponde alla directory elencata nella proprietà <testSourceDirectory>in pom.xml nella <build>proprietà. Mi ci è voluto un po 'per trovarlo.


13

Maven non eseguirà i test se il progetto ha <packaging>pom</packaging>

È necessario impostare la confezione su jar (o su un altro tipo di artefatto java) per l'esecuzione dei test: <packaging>jar</packaging>


12

Nel mio caso è stato aggiunto il motore junit-vintage che lo rende compatibile con la versione precedente dei test JUnit e può eseguirli. Come sto usando JUnit 5.

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

Penso che SpringBoot includa solo ciò che utilizza. Ha senso che devi specificare le tue dipendenze in base alle tue esigenze. Altrimenti, importerai un sacco di librerie che non usi.
Duc Tran,

12

Molte di queste risposte mi sono state molto utili in passato, ma vorrei aggiungere uno scenario aggiuntivo che mi è costato un po 'di tempo, poiché potrebbe aiutare gli altri in futuro:

Assicurarsi che le classi e i metodi di test siano pubblici.

Il mio problema era che stavo usando una funzione di generazione automatica di classi / metodi del mio IDE (IntelliJ) e per qualche motivo li ha creati come pacchetto-privato. Trovo che questo sia più facile da perdere di quanto ci si aspetterebbe.


1
Questo è il problema che ho avuto anche, per qualche motivo IntelliJ sta creando dei test come pacchetto privato e Maven non li vede. Modificando la classe e il metodo @Test in modo pubblico, eseguire i test.
AlexC,

Risolto il mio problema! Si noti che ciò non si applica a JUnit 5+. Suppongo che il generatore di codice di IntelliJ presuma che tu stia utilizzando l'ultima versione.
lamino,

@lamino Stavo usando junit5 e non funzionava perché il mio metodo di prova non era pubblico
SudhirKumar

Un po 'sfacciato da IntelliJ per dirmi che i metodi possono essere package-private ..
Wecherowski,

9

Verifica che (per jUnit - 4.12 e il plugin infallibile Eclipse)

  1. Aggiungi la versione jUnit richiesta in POM.xml nelle dipendenze. Do Maven -> Aggiorna progetto per vedere i vasi richiesti esportati nel progetto.
  2. La classe di test si trova nella cartella src / test / java e nelle sottodirectory di questa cartella (o la cartella di base può essere specificata in POM nella configurazione testSourceDirectory). Il nome della classe dovrebbe avere la parola tailng 'Test'.
  3. Il metodo di test nella classe di test dovrebbe avere l'annotazione @Test

1
Questo è più un problema di configurazione Java, ma oltre a nominare correttamente la classe di test e mettere il file di test nella directory di test in src, il nome del pacchetto della classe di test deve corrispondere al nome del pacchetto della classe che si sta testando.
Paolo,

2
@Paul False - Maven eseguirà tutte le classi corrispondenti alla convenzione di cui sottosrc/test/java . La convenzione del pacchetto è per la struttura e per consentire ai test di accedere a metodi privati ​​del pacchetto.
Michael K,


6

Faccio fatica con questo problema. Nel mio caso non stavo importando l' annotazione @Test corretta .

1) Controlla se @Test proviene da org.junit.jupiter.api.Test (se stai usando Junit 5).

2) Con Junit5 invece di @RunWith(SpringRunner.class), utilizzare@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

Se hai un'applicazione Java / Groovy condivisa e tutto ciò che hai sono test di unità Groovy, Maven non troverà alcun test. Questo può essere risolto aggiungendo un'unità di test in src / test / java.


4

Ho anche avuto un problema simile, dopo aver esplorato ho scoperto che la dipendenza testng sta causando questo problema. Dopo aver rimosso la dipendenza testng da pom (poiché non ne ho più bisogno), ha iniziato a funzionare bene per me.

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

4

Se hai creato Spring Bootun'applicazione utilizzando Spring Initializr , i test vengono eseguiti perfettamente da Intellij Idea. Ma, se provi a eseguire test da una riga di comando:

mvn clean test

Potresti essere stato sorpreso dal fatto che nessun test è stato eseguito affatto. Ho provato ad aggiungere surefire pluginsenza fortuna. La risposta era semplice: pom.xmlconteneva la seguente dipendenza:

     <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>

L'esclusione, junit-vintage-engineè dedicata al mantenimento della compatibilità con le versioni precedenti JUnit 4.x. Pertanto, le nuove versioni di Spring Boot Initializr non lo supportano per impostazione predefinita. Dopo aver rimosso l'esclusione, ho Maveniniziato a vedere i test del progetto.


3

Se il nome della classe di test non segue la convenzione di denominazione standard (come evidenziato da @axtavt sopra), è necessario aggiungere il nome del modello / classe in pom.xmlper consentire a Maven di selezionare il 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

dovrebbe essere

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

Il Maven trova quelle estremità Test o inizia con Test per essere eseguito automaticamente.

Tuttavia, è possibile utilizzare

mvn surefire:test -Dtest=ClassUnderTestTests.java 

per eseguire i test.


2

Ecco il codice esatto che ho dovuto aggiungere al mio 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>

Ed ecco le mie dipendenze:

    <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

Ho riscontrato lo stesso problema, risolto dalla seguente modifica in pom.xml:

<build>
    <testSourceDirectory>test</testSourceDirectory>

...

cambiato in:

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

1

Mi è successo un altro motivo per non eseguire i casi di test: avevo una proprietà chiamata "test" per scopi completamente diversi, ma interferiva con il plugin surefire. Pertanto, controlla i tuoi POM per:

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

e rimuoverlo.


1

Un altro suggerimento (oltre alle risposte precedenti):

In Eclipse, vai su Proprietà del tuo progetto> fai clic su Run/Debug Settings:

"Questa pagina consente di gestire le configurazioni di avvio con la risorsa attualmente selezionata"

Qui puoi aggiungere (Nuovo ...) o rimuovere (Elimina) tutti i test JU (JUnit) che hai nel tuo progetto (sotto la src/test/javacartella o il corso).


1

Se hai scritto i tuoi test in JUnit 4 e hai aggiunto le dipendenze di JUnit 5 al plugin surefire, i test non verranno eseguiti.

In tal caso, basta commentare le dipendenze di JUnit 5 dal plugin 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

In seguito ha funzionato bene per me in 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

Nel mio caso siamo un'applicazione multimodulo di migrazione a Spring Boot. Sfortunatamente Maven non ha più eseguito tutti i test nei moduli. La denominazione delle Classi di test non è cambiata, stiamo seguendo le convenzioni di denominazione.

Alla fine mi ha aiutato, quando ho aggiunto la dipendenza surefire-junit47al plugin maven-surefire-plugin. Ma non ho potuto spiegare, perché, è stato tentativi ed errori:

<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

Stavo correndo casi di test Junit-5 con Maven 3.6.2 e mostravo sempre Test run: 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] ------------------------------------------------------------------------

I test Junt-5 non vengono eseguiti con il link Maven salvato la mia giornata.


0

junitArtifactNamepotrebbe anche essere il caso se la JUnit in uso non è lo standard ( junit:junit) ma per esempio ...

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

0

Nel caso in cui qualcuno abbia cercato e non lo risolvo, avevo una libreria per diversi test:

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

Quando ho installato junit tutto ha funzionato, spero e aiuti questo:

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

0

ho usato questo codice

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

al mio pom.xml, assicurati solo che il file testng sia specifico lì

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

0

Tale problema potrebbe verificarsi quando si utilizza il plugin 3.x.x + di surfire con JUnit5 e per errore annotare la classe di test con @Testannotazioni da JUnit4.

Usa: org.junit.jupiter.api.Test(JUnit5) invece di org.junit.Test(Junit4)

NOTA: questo potrebbe essere difficile da notare poiché l'IDE potrebbe eseguire questi problemi senza il test JUnit4.


0

Un altro problema facilmente trascurabile: assicurarsi che il file della classe abbia l'estensione .java

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.