Maven çalıştırmak için JUnit testleri bulamıyor


416

Bir maven programım var, iyi derliyor. Çalıştığımda mvn testherhangi bir test yapmıyor (TEST başlığı altında yazıyor There are no tests to run.).

Ben bu sorunu aşağıda çalıştırılacak çıktı yanı sıra dahil olacak süper basit bir kurulum ile yeniden yarattım -X.

Eclipse birim testleri (hem varsayılan junit paketi ile hem de bunun yerine maven tarafından indirilen junit.jar dahil) iyi çalışır. Ayrıca mvn test-compilesınıfı test sınıfları altında doğru şekilde oluşturur. Ben Maven 3.0.2 ve java 1.6.0_24 ile OSX 10.6.7 üzerinde çalışıyorum.

Dizin yapısı şöyledir:

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

MVN -X testinin sonu:

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

Yanıtlar:


667

Varsayılan olarak Maven , çalıştırılacak testleri ararken aşağıdaki adlandırma kurallarını kullanır:

Test sınıfınız bu kurallara uymuyorsa, onu yeniden adlandırmalı veya Maven Surefire Eklentisini test sınıfları için başka bir desen kullanacak şekilde yapılandırmalısınız .


4
Maaven yapılandırmasını değiştirmeyi daha çekici buluyorum. Bu adlandırma kuralı, deneyimsiz kullanıcı için bazı tehlikeler doğurur. Testcase'lerinizi SomethingTest1 gibi adlandırmak, SomethingTest2 testlerin sessizce yapılmamasına neden olur. Maven, geriye dönük uyumluluk için bunu yapamaz, ancak tüm dosyalarda test senaryoları aramak için daha fazla mantık ekler.
Tobias Kremer

8
Bunu hiç bilmiyordum - "Testler" ile biten iki vaka vardı ve maven onları çalıştırmayı reddetti ... "Test" olarak değiştirildi ve her şey tekrar lolipop loncada iyi. Teşekkürler.
demaniak

2
@ Tobiler Adlandırma kuralından kaynaklanan tehlike hakkındaki görüşünüze katılıyorum. Ayrıca, ek açıklamaların kullanımıyla ima edilen kalıbı kırar. Ek açıklama kullanmanın örtük bir sonucu, belirli bir ek açıklamaya sahip sınıfların / yöntemlerin aranabilmesidir. Maven'in adlandırma kuralı kısıtlamasını yerine koymamasını ve sadece herhangi bir sınıftaki @Test ek açıklama yöntemlerini taramaya dayanmasını umuyordum .
Angad

2
Surefire belgelerinin artık**/*Tests.java varsayılan bir içerme olduğunu iddia ettiğini unutmayın!
Gareth

11
Soru: Öyleyse, Test * kuralını yine de takip etmeniz gerekiyorsa neden @test ile açıklama ekleyin?
dynex

88

Ayrıca birim test kodunun test klasörünün altına konması gerektiğini, ana klasörün altına koyarsanız test sınıfı olarak tanınamayacağını buldum. Örneğin.

Yanlış

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

Sağ

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

3
Teşekkür ederim! Bu ve dosyada test ( <scope>test<scope>) kapsamı ayarlamak pom.xmlbenim için yaptı.
dinesharjani

Buna girdim, testlere karşı testlere dikkat et. Uygun olan testtir
Bruck Wubete

72

Modül ambalajı doğru şekilde bildirilmezse Maven'in testleri bulamamasına neden olabilecek başka bir şey.

Son zamanlarda, birileri vardı <packaging>pom</packaging>ve testlerim hiç koşmadı. Ben olarak değiştirdim <packaging>jar</packaging>ve şimdi iyi çalışıyor.


4
Mükemmel öneri! Tek modüllü Maven yapısını çoklu parçalara böldüğünüzde 'kopyala-yapıştır' tehlikelerini gösterir.
morsor

4
Maven 'a package type is pom - so not running testsgeliştiriciler için bir ipucu vermek için bir mesaj yazdırmak isterdim :(
Arun Avanathan

60

GÜNCELLEME:

@Scottyseus'un yorumlarda söylediği gibi, Maven Surefire 2.22.0'dan başlayarak aşağıdakiler yeterlidir:

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

JUnit 5 kullanırken, ben aynı sorunla karşılaştı. Maven Surefire, JUnit 5 testlerini çalıştırmak için bir eklentiye ihtiyaç duyuyor. Bunu bizim sitemize ekleyin 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>

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


İçin "bulunamadı" diyorum junit-platform-surefire-provider.
Arya Pourtabatabaie

2
Surefire 2.22 ile, nesnelere surefire-providerveya jupiter-engineyapay nesnelere bağımlılık eklemek gerekmemelidir . Testlerim en azından onlarsız çalışıyor gibi görünüyor. bu cevaba bakınız .
scottysseus

Ayrıca bu eklentiyi kullanmak org.junit.jupiter.api.Testyerine kullanmanız gerektiğini belirtmek gerekir , org.junit.Testaksi takdirde testler bulunmaz.
austin_ce

30

Ayrıca, test sınıfları dizininizin (örn. Src / test / java) <testSourceDirectory>pom.xml dosyanızdaki <build>özellik altında listelenen dizine karşılık gelip gelmediğini kontrol edin . Bunu bulmak için bana biraz zaman ayırdı.


13

Maven, proje varsa testlerinizi yapmayacaktır. <packaging>pom</packaging>

Testlerin çalışması için ambalajı kavanoz (veya başka bir java artefakt tipi) olarak ayarlamanız gerekir: <packaging>jar</packaging>


12

Benim durumumda, JUnit testlerinin eski sürümüyle uyumlu hale getiren ve bunları çalıştırabilen junit-vintage-engine ekleniyordu. JUnit 5 kullanıyorum.

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

Bence SpringBoot sadece ne kullandığını içeriyor. Bağımlılıklarınızı ihtiyaçlarınıza göre belirtmeniz mantıklıdır. Aksi takdirde, kullanmadığınız bir grup kütüphaneyi içe aktaracaksınız.
Duc Tran

12

Bu cevapların birçoğu geçmişte benim için oldukça yararlıydı, ancak ileride başkalarına yardımcı olabileceğinden, bana biraz zamana mal olan ek bir senaryo eklemek istiyorum:

Test sınıflarının ve yöntemlerinin herkese açık olduğundan emin olun.

Benim sorunum IDE (IntelliJ) otomatik bir test sınıfı / yöntem oluşturma özelliği kullanmak ve bazı nedenlerle onları paket özel olarak yarattı oldu. Bunu kaçırmayı beklediğimden daha kolay buluyorum.


1
Bu da benim yaşadığım problem, IntelliJ nedense test-private olarak testler yapıyor ve Maven bunları göremiyor. Sınıf ve @Test yönteminin halka açık maven olarak değiştirilmesi testleri gerçekleştirir.
AlexC

Sorunumu çözdü! Bunun JUnit 5+ için geçerli olmadığını unutmayın. Sanırım IntelliJ'in kod üreticisi en son sürümü kullandığınızı varsayar.
lamino

@lamino junit5 kullanıyordum ve test yöntemim halka açık olmadığından başarısız oldu
SudhirKumar

Yöntemlerin pakete özel olabileceğini söylemek için IntelliJ'den biraz arsız ..
Wecherowski

9

Şunları kontrol edin (jUnit - 4.12 ve Eclipse güzelliğinde eklentisi için)

  1. Gerekli jUnit sürümünü POM.xml dosyasına bağımlılık olarak ekleyin. Maven -> Projede dışa aktarılan gerekli kavanozları görmek için projeyi güncelleyin.
  2. Test sınıfı src / test / java klasörü altındadır ve bu klasörün alt dizinleri (veya temel klasör POM içinde config testSourceDirectory içinde belirtilebilir). Sınıfın adında “Test” ifadesi bulunmalıdır.
  3. Test sınıfındaki Test Yönteminde @Test ek açıklaması olmalıdır

1
Bu daha çok bir java yapılandırma sorunudur, ancak test sınıfını doğru bir şekilde adlandırmaya ve test dosyasını src altındaki test dizinine koymaya ek olarak, test sınıfının paket adı test ettiğiniz sınıfın paket adıyla eşleşmelidir.
Paul

2
@Paul False - Maven , sözleşmeye uygun tüm sınıfları uygulayacaktırsrc/test/java . Paket kuralı yapı içindir ve testlerin paket-özel yöntemlere erişmesine izin verir.
Michael K


6

Bu sorunla mücadele ediyorum. Benim durumumda doğru @Test ek açıklamasını içe aktarmıyordum .

@Test dan ise 1) Kontrol org.junit.jupiter.api.Test Eğer JUnit 5 kullanıyorsanız) (.

2) ile Junit5 yerine @RunWith(SpringRunner.class), kullanımı@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

Paylaşılan bir Java / Groovy uygulamanız varsa ve sahip olduğunuz tek şey Groovy birim testleri ise, Maven herhangi bir test bulamaz. Bu, src / test / java altına bir birim test eklenerek düzeltilebilir.


4

Testng bağımlılığının bu soruna neden olduğunu keşfettikten sonra da benzer bir sorun yaşadım. Testng bağımlılığını pom'dan çıkardıktan sonra (artık ihtiyacım olmadığı için) benim için iyi çalışmaya başladı.

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

4

Spring InitializrSpring Boot kullanarak bir uygulama oluşturduysanız , testler Intellij Idea'dan sorunsuz çalışır. Ancak, testleri bir komut satırından çalıştırmayı denerseniz:

mvn clean test

Hiç test yapılmadığına şaşırmış olabilirsiniz. Şanssız eklemeye çalıştım surefire plugin. Cevap basitti: pom.xmlaşağıdaki bağımlılığı içeriyordu:

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

Hariç tutma,, junit-vintage-engineile geriye dönük uyumluluğu korumaya adanmıştır JUnit 4.x. Bu nedenle, Spring Boot Initializr'ın yeni sürümleri varsayılan olarak desteklemez. Hariç tutmayı kaldırdıktan sonra Mavenprojenin testlerini görmeye başladım.


3

Test sınıfı adınız standart adlandırma kuralına uymuyorsa (yukarıdaki @axtavt tarafından vurgulandığı gibi), pom.xmlMaven'in testi seçmesi için desen / sınıf adını eklemeniz gerekir.

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

olmalı

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

Maven bu Testi bitirir veya otomatik olarak çalıştırmak için Test ile başlar.

Ancak,

mvn surefire:test -Dtest=ClassUnderTestTests.java 

testlerinizi yapmak için.


2

İşte benim pom.xml eklemek zorunda tam kodu:

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

İşte bağımlılıklarım:

    <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

Aynı sorunla karşılaştım, pom.xml'deki değişiklikle çözüldü:

<build>
    <testSourceDirectory>test</testSourceDirectory>

...

olarak değiştirildi:

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

1

Test senaryolarını çalıştırmamanın bir başka nedeni de oldu - tamamen farklı amaçlar için "test" adlı bir mülküm vardı, ancak kesin ateşleme eklentisine müdahale etti. Bu nedenle, lütfen POM'larınızı kontrol edin:

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

ve çıkarın.


1

Bir ipucu daha (önceki cevaplara ek olarak):

Eclipse uygulamasında projenizin Özellikler bölümüne gidin> tıklayın Run/Debug Settings:

"Bu sayfa, seçili kaynakla başlatma yapılandırmalarını yönetmenizi sağlar"

Burada, projenizde ( src/test/javaklasör veya dersin altında) sahip olduğunuz JU (JUnit) testlerini ekleyebilir (Yeni ...) veya kaldırabilir (Sil ).


1

Testlerinizi JUnit 4'te yazdıysanız ve JUnit 5 bağımlılıklarını surefire eklentisine eklediyseniz, testleriniz çalışmaz.

Bu durumda, JUnit 5 bağımlılıklarını surefire eklentisinden yorumlayın:

        <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

Aşağıdaki Junit 5 benim için iyi çalıştı

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

Benim durumumda Spring Boot'a geçiş çok modüllü uygulama. Maalesef maven, modüllerde artık tüm testleri yapmadı. Test Sınıflarının isimleri değişmedi, isimlendirme kurallarını takip ediyoruz.

Sonunda, surefire-junit47eklentiye bağımlılığı eklediğimde yardımcı oldu maven-surefire-plugin. Ama neden deneme yanılma olduğunu açıklayamadım:

<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

Maven 3.6.2 ile Junit-5 test kılıfları çalıştırıyordum ve her zaman Test çalıştırması gösteriliyordu : 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] ------------------------------------------------------------------------

Junt-5 testleri günümü kurtarmış maven bağlantısı altında çalışmıyor .


0

junitArtifactNamekullanımda olan JUnit standart ( junit:junit) değilse, ancak örneğin ...

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

0

Birisinin arama yapması ve çözmemesi durumunda, farklı testler için bir kütüphanem vardı:

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

Junit'i kurduğumda her şey işe yaradı, umarım ve yardım ederim:

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

0

bu kodu kullanarak kullandım

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

benim pom.xml, sadece orada belirli testng dosya olduğundan emin olun

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

0

JUnit5 ile 3.x.x surfire eklentisi kullandığınızda ve yanlışlıkla JUnit4'ten ek açıklama ile test sınıfına açıklama eklediğinizde bu sorun oluşabilir @Test.

Kullanın org.junit.jupiter.api.Test(Junit4) yerine org.junit.Test(JUnit5)

NOT: IDE bu sorunları JUnit4 testi gibi çalıştırabileceğinden, bunu fark etmek zor olabilir.


0

Başka bir kolayca gözden kaçan sorun - Sınıfınızın dosyasının .java uzantısına sahip olduğundan emin olun

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.