Maven ไม่พบการทดสอบ JUnit ที่จะเรียกใช้


416

ฉันมีโปรแกรม maven มันรวบรวมได้ดี เมื่อฉันเรียกใช้mvn testจะไม่เรียกใช้การทดสอบใด ๆ (ภายใต้หัวข้อ TESTs บอกว่าThere are no tests to run.)

-Xผมเคยสร้างปัญหานี้ด้วยการติดตั้งง่ายสุดซึ่งผมจะรวมถึงด้านล่างเช่นเดียวกับการส่งออกเมื่อทำงานกับ

การทดสอบหน่วยทำงานได้ดีจาก eclipse (ทั้งคู่กับแพ็คเกจ junit เริ่มต้นและเมื่อฉันรวม junit.jar ที่ดาวน์โหลดโดย maven) mvn ยังtest-compileสร้างคลาสได้อย่างถูกต้องภายใต้คลาสทดสอบ ฉันใช้งานบน OSX 10.6.7 ด้วย Maven 3.0.2 และ java 1.6.0_24

นี่คือโครงสร้างไดเรกทอรี:

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

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

คำตอบ:


667

โดยค่าเริ่มต้น Maven ใช้แบบแผนการตั้งชื่อต่อไปนี้เมื่อค้นหาการทดสอบเพื่อเรียกใช้:

หากคลาสทดสอบของคุณไม่เป็นไปตามอนุสัญญาเหล่านี้คุณควรเปลี่ยนชื่อหรือกำหนดค่าปลั๊กอิน Maven Surefireเพื่อใช้รูปแบบอื่นสำหรับคลาสทดสอบ


4
ฉันคิดว่าน่าสนใจกว่าที่จะเปลี่ยนการกำหนดค่า Maven แบบแผนการตั้งชื่อนี้อาจก่อให้เกิดอันตรายต่อผู้ใช้ที่ไม่ได้ประเมินค่า การตั้งชื่อชุดทดสอบของคุณเช่น SomethingTest1, SomethingTest2 จะส่งผลให้การทดสอบเงียบลงโดยไม่ดำเนินการใด ๆ Maven ไม่สามารถทำสิ่งนี้เพื่อความเข้ากันได้แบบย้อนหลัง แต่จะมีตรรกะมากกว่าเพื่อค้นหา testcase ในไฟล์ทั้งหมด
Tobias Kremer

8
ฉันไม่เคยรู้เรื่องนี้ - มีสองกรณีที่จบลงด้วย "การทดสอบ" และนกกาเหว่าปฏิเสธที่จะเรียกใช้พวกเขา ... เปลี่ยนเป็น "การทดสอบ" และทุกอย่างเป็นอย่างดีในสมาคมอมยิ้มอีกครั้ง ขอบคุณ
demaniak

2
@Tobias ฉันเห็นด้วยกับจุดของคุณเกี่ยวกับอันตรายที่กำหนดไว้กับแบบแผนการตั้งชื่อ มันยังแบ่งรูปแบบโดยนัยโดยการใช้คำอธิบายประกอบ ผลลัพธ์โดยนัยของการใช้หมายเหตุประกอบคือสามารถค้นหาคลาส / วิธีที่มีหมายเหตุประกอบเฉพาะได้ ฉันจะหวังว่า Maven ไม่ได้วางข้อ จำกัด การตั้งชื่อและไว้วางใจในการสแกน@Testวิธีการเพิ่มความคิดเห็นในทุกชั้นเรียน
Angad

2
โปรดทราบว่าขณะนี้เอกสารประกอบของ surefire อ้างว่า**/*Tests.javaเป็นค่าเริ่มต้น
Gareth

11
คำถาม: เหตุใดจึงต้องใส่คำอธิบายประกอบด้วย @test หากคุณต้องทำตามแบบทดสอบ * ต่อไป
dynex

88

ฉันยังพบว่ารหัสทดสอบหน่วยควรวางไว้ใต้โฟลเดอร์ทดสอบไม่สามารถจดจำได้ว่าเป็นคลาสทดสอบหากคุณวางไว้ใต้โฟลเดอร์หลัก เช่น.

ไม่ถูกต้อง

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

ขวา

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

3
ขอขอบคุณคุณ! สิ่งนี้และการตั้งค่าขอบเขตการทดสอบ ( <scope>test<scope>) ในpom.xmlไฟล์ทำเพื่อฉัน
dinesharjani

ฉันวิ่งเข้าไปในนี้ระวังการทดสอบเทียบกับการทดสอบ หนึ่งที่เหมาะสมคือการทดสอบ
Bruck Wubete

72

อีกสิ่งหนึ่งที่อาจทำให้ Maven ไม่พบการทดสอบหากว่าบรรจุภัณฑ์ของโมดูลนั้นไม่ได้ประกาศอย่างถูกต้อง

ในกรณีล่าสุดบางคนมี<packaging>pom</packaging>และการทดสอบของฉันไม่เคยวิ่ง ฉันเปลี่ยนเป็น<packaging>jar</packaging>และตอนนี้ก็ใช้งานได้ดี


4
ข้อเสนอแนะที่ยอดเยี่ยม! แสดงให้เห็นถึงอันตรายของ 'copy-paste' เมื่อแยกชิ้นส่วน Maven โมดูลเดียวออกเป็นหลาย ๆ
พูดที่

4
ฉันหวังว่า maven พิมพ์ข้อความ - package type is pom - so not running tests- เพื่อให้เบาะแสบางอย่างกับนักพัฒนา :(
อรุณอวานาธาน

60

UPDATE:

เช่น @scottyseus กล่าวในความคิดเห็นเริ่มต้นจาก Maven Surefire 2.22.0 ต่อไปนี้ก็เพียงพอแล้ว:

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

เมื่อใช้ JUnit 5 ฉันพบปัญหาเดียวกัน Maven Surefire ต้องการปลั๊กอินเพื่อทำการทดสอบ JUnit 5 เพิ่มไปยังของเรา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>

ที่มา: https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven


ฉันได้รับ "ไม่พบ" junit-platform-surefire-providerสำหรับ
Arya Pourtabatabaie

2
โปรดทราบว่าด้วย Surefire 2.22 คุณไม่จำเป็นต้องเพิ่มการพึ่งพาsurefire-providerหรือjupiter-engineสิ่งประดิษฐ์ การทดสอบของฉันดูเหมือนจะทำงานได้ดีหากไม่มีพวกเขาอย่างน้อย ดูคำตอบนี้
scottysseus

นอกจากนี้ยังเป็นที่น่าสังเกตว่าคุณต้องใช้org.junit.jupiter.api.Testแทนorg.junit.Testเมื่อใช้ปลั๊กอินนี้ไม่เช่นนั้นจะไม่พบการทดสอบ
austin_ce

30

นอกจากนี้ตรวจสอบว่าไดเร็กทอรีคลาสทดสอบของคุณ (เช่น src / test / java) สอดคล้องกับไดเร็กทอรีที่แสดงรายการอยู่ในคุณสมบัติ<testSourceDirectory>ใน pom.xml ของคุณภายใต้<build>คุณสมบัติหรือไม่ เอาฉันสักครู่เพื่อหาว่า


13

Maven จะไม่เรียกใช้การทดสอบของคุณหากโครงการมี <packaging>pom</packaging>

คุณต้องตั้งค่าบรรจุภัณฑ์เป็นขวด (หรือบางประเภทจาวาสิ่งประดิษฐ์) เพื่อให้การทดสอบทำงาน: <packaging>jar</packaging>


12

ในกรณีของฉันมันเพิ่ม Junit-vintage-engine ซึ่งทำให้เข้ากันได้กับการทดสอบ JUnit รุ่นเก่ากว่าและสามารถรันได้ ขณะที่ฉันใช้ JUnit 5

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

ฉันคิดว่า SpringBoot มีเฉพาะสิ่งที่ใช้ ทำให้รู้สึกว่าคุณต้องระบุการอ้างอิงของคุณตามความต้องการของคุณ มิฉะนั้นคุณจะต้องนำเข้าไลบรารีทั้งหมดที่คุณไม่ได้ใช้
Duc Tran

12

หลายคำตอบเหล่านี้มีประโยชน์กับฉันในอดีต แต่ฉันต้องการเพิ่มสถานการณ์เพิ่มเติมที่ทำให้ฉันเสียเวลาเพราะมันอาจช่วยคนอื่น ๆ ในอนาคต:

ตรวจสอบให้แน่ใจว่าคลาสการทดสอบและวิธีการเป็นสาธารณะ

ปัญหาของฉันคือฉันใช้คุณลักษณะการสร้างคลาสการทดสอบ / วิธีอัตโนมัติของ IDE (IntelliJ) ของฉันและด้วยเหตุผลบางอย่างมันสร้างมันเป็นแพคเกจส่วนตัว ฉันคิดว่านี่เป็นเรื่องง่ายที่จะพลาดได้มากกว่าที่คาดไว้


1
นี่คือปัญหาที่ฉันมีด้วยเหตุผลบางอย่าง IntelliJ กำลังสร้างการทดสอบเนื่องจากแพคเกจส่วนตัวและ Maven ไม่สามารถมองเห็นพวกเขาได้ การเปลี่ยนคลาสและวิธี @Test เป็น maven ที่ทำให้เป็นสาธารณะดำเนินการทดสอบ
AlexC

แก้ไขปัญหาของฉัน! โปรดทราบว่าสิ่งนี้ใช้ไม่ได้กับ JUnit 5+ ฉันเดาว่าตัวสร้างโค้ดของ IntelliJ สมมติว่าคุณกำลังใช้เวอร์ชันล่าสุด
lamino

@lamino ฉันใช้ junit5 และมันก็ล้มเหลวเพราะวิธีการทดสอบของฉันไม่เป็นสาธารณะ
SudhirKumar

Cheeky นิดหน่อยจาก IntelliJ บอกฉันว่าวิธีการสามารถเป็นแพคเกจส่วนตัว ..
Wecherowski

9

ตรวจสอบว่า (สำหรับปลั๊กอิน jUnit - 4.12 และ Eclipse surefire)

  1. เพิ่มรุ่น jUnit ที่ต้องการใน POM.xml ตามการอ้างอิง Do Maven -> อัปเดตโครงการเพื่อดูขวดที่ต้องการส่งออกในโครงการ
  2. คลาสการทดสอบอยู่ภายใต้โฟลเดอร์ src / test / java และไดเรกทอรีย่อยของโฟลเดอร์นี้ (หรือโฟลเดอร์ฐานสามารถระบุได้ใน POM ในการกำหนดค่า testSourceDirectory) ชื่อของชั้นควรมีคำว่า 'ทดสอบ'
  3. วิธีทดสอบในคลาสทดสอบควรมีคำอธิบายประกอบ @Test

1
นี่เป็นปัญหาของการกำหนดค่า java มากกว่า แต่นอกเหนือจากการตั้งชื่อคลาสการทดสอบอย่างถูกต้องและวางไฟล์ทดสอบในไดเรกทอรีทดสอบภายใต้ src ชื่อแพคเกจของคลาสทดสอบต้องตรงกับชื่อแพ็กเกจของคลาสที่คุณกำลังทดสอบ
พอล

2
@ Paul เท็จ - Maven จะดำเนินการเรียนทั้งหมดที่ตรงกับการประชุมภายใต้ src/test/javaแบบแผนแพคเกจสำหรับโครงสร้างและเพื่อให้การทดสอบการเข้าถึงวิธีการแพคเกจส่วนตัว
Michael K

9

ค้นพบว่าคุณนำหน้าการทดสอบด้วย 'นามธรรม' มันจะถูกละเว้นโดยค่าเริ่มต้นเช่นกัน


1
maven.apache.org/guides/getting-started `` `และค่าเริ่มต้นไม่รวม: * / Abstract Test.java * / Abstract TestCase.java` ``
แอนทอนเมเยอร์

*/TestAbstractSomeClassName.javaนอกจากนี้ยังดูเหมือนจะไม่สนใจ
Collin Krawll

6

ฉันต่อสู้กับปัญหานี้ ในกรณีของฉันฉันไม่ได้นำเข้า@Test ที่ถูกต้องบันทึกย่อ

1) ตรวจสอบว่า @Test มาจากorg.junit.jupiter.api.Test (ถ้าคุณใช้ Junit 5)

2) ใช้ Junit5 แทน@RunWith(SpringRunner.class)ใช้@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

หากคุณมีแอปพลิเคชัน Java / Groovy ที่ใช้ร่วมกันและสิ่งที่คุณมีทั้งหมดคือการทดสอบหน่วย Groovy Maven จะไม่พบการทดสอบใด ๆ สิ่งนี้สามารถแก้ไขได้โดยการเพิ่มการทดสอบหนึ่งหน่วยภายใต้ src / test / java


4

ฉันยังมีปัญหาที่คล้ายกันหลังจากการสำรวจพบว่าการพึ่งพา testng ทำให้เกิดปัญหานี้ หลังจากลบการพึ่งพา testng จาก pom (เนื่องจากฉันไม่ต้องการมันอีกต่อไป) มันเริ่มทำงานได้ดีสำหรับฉัน

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

4

หากคุณสร้างSpring Bootแอปพลิเคชันโดยใช้Spring Initializrการทดสอบจะเริ่มต้นจาก Intellij Idea แต่ถ้าพยายามเรียกใช้การทดสอบจากบรรทัดคำสั่ง:

mvn clean test

คุณอาจประหลาดใจที่ไม่มีการทดสอบใด ๆ เลย ฉันพยายามเพิ่มsurefire pluginโดยไม่มีโชค คำตอบนั้นง่าย: pom.xmlมีการพึ่งพาต่อไปนี้:

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

ยกเว้น, มีความมุ่งมั่นในการรักษาความเข้ากันได้ย้อนหลังกับjunit-vintage-engine JUnit 4.xดังนั้น Spring Spring Initializr รุ่นใหม่จึงไม่รองรับโดยปริยาย หลังจากที่ฉันลบการยกเว้นMavenเริ่มที่จะเห็นการทดสอบของโครงการ


3

หากชื่อคลาสทดสอบของคุณไม่เป็นไปตามมาตรฐานการตั้งชื่อ (ตามที่เน้นโดย @axtavt ด้านบน) คุณจะต้องเพิ่มชื่อรูปแบบ / คลาสในpom.xmlMaven เพื่อเลือกการทดสอบ -

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

ควรจะเป็น

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

Maven ค้นหาการสิ้นสุดเหล่านั้นหรือเริ่มต้นด้วยการทดสอบเพื่อให้ทำงานโดยอัตโนมัติ

อย่างไรก็ตามคุณสามารถใช้

mvn surefire:test -Dtest=ClassUnderTestTests.java 

เพื่อทำการทดสอบ


2

นี่คือรหัสที่ฉันต้องเพิ่มใน 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>

และนี่คือการพึ่งพาของฉัน:

    <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

ฉันประสบปัญหาเดียวกันก็แก้ไขได้โดยการเปลี่ยนแปลงด้านล่างใน pom.xml:

<build>
    <testSourceDirectory>test</testSourceDirectory>

...

เปลี่ยนไปเป็น:

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

1

อีกเหตุผลหนึ่งที่ไม่ใช้กรณีทดสอบเกิดขึ้นกับฉัน - ฉันมีคุณสมบัติชื่อ "ทดสอบ" เพื่อวัตถุประสงค์ที่แตกต่างกันโดยสิ้นเชิง แต่มันรบกวนปลั๊กอินของ surefire ดังนั้นโปรดตรวจสอบ POM ของคุณเพื่อ:

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

และลบออก


1

อีกหนึ่งเคล็ดลับ (นอกเหนือจากคำตอบก่อนหน้า):

ใน Eclipse ไปที่คุณสมบัติของโครงการ> คลิกRun/Debug Settings:

"หน้านี้ช่วยให้คุณสามารถจัดการการกำหนดค่าการเปิดตัวด้วยทรัพยากรที่เลือกในปัจจุบัน"

ในนั้นคุณสามารถเพิ่ม (ใหม่ ... ) หรือลบ (ลบ) การทดสอบ JU (JUnit) ใด ๆ ที่คุณมีในโครงการของคุณ (ภายใต้src/test/javaโฟลเดอร์หรือหลักสูตร)


1

หากคุณเขียนการทดสอบของคุณใน JUnit 4 และเพิ่มการพึ่งพา JUnit 5 ในปลั๊กอิน surefire การทดสอบของคุณจะไม่ทำงาน

ในกรณีนั้นเพียงแสดงความคิดเห็น JUnit 5 การพึ่งพาจากปลั๊กอิน 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

การติดตามใช้งานได้ดีสำหรับฉันใน 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

ในกรณีของฉันเรากำลังย้ายแอพพลิเคชั่นมัลติโมดุลไปยัง Spring Boot น่าเสียดายที่ Maven ไม่ได้ทำการทดสอบทั้งหมดอีกต่อไปในโมดูล การตั้งชื่อของคลาสทดสอบไม่เปลี่ยนเรากำลังทำตามแบบแผนการตั้งชื่อ

ในตอนท้ายมันจะช่วยเมื่อฉันได้เพิ่มการพึ่งพาการปลั๊กอินsurefire-junit47 maven-surefire-pluginแต่ฉันไม่สามารถอธิบายได้ว่าทำไมมันถึงได้ลองผิดลองถูก:

<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

ฉันใช้งานกรณีทดสอบ Junit-5 ด้วย maven 3.6.2 และมันก็แสดงให้เห็นอยู่เสมอ การทดสอบการทำงาน : 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 ไม่ได้ทำงานภายใต้การเชื่อมโยง Mavenบันทึกวันของฉัน


0

junitArtifactNameอาจเป็นกรณีถ้า JUnit ใช้ไม่มาตรฐาน ( junit:junit) แต่สำหรับ ...

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

0

ในกรณีที่มีคนค้นหาและฉันไม่ได้แก้ปัญหาฉันมีห้องสมุดสำหรับการทดสอบที่แตกต่างกัน:

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

เมื่อฉันติดตั้ง Junit ทุกอย่างทำงานฉันหวังและช่วยเหลือสิ่งนี้:

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

0

ฉันใช้รหัสนี้

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

เพื่อ pom.xml ของฉันเพียงแค่ให้แน่ใจว่าไฟล์ testng เฉพาะที่นั่น

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

0

ปัญหาดังกล่าวอาจเกิดขึ้นเมื่อคุณใช้ surfire plugin 3.x.x + กับ JUnit5 และเกิดข้อผิดพลาดในคำอธิบายประกอบคลาสทดสอบด้วย@Testหมายเหตุประกอบจาก JUnit4

ใช้: org.junit.jupiter.api.Test(JUnit5) แทนorg.junit.Test (Junit4)

หมายเหตุ: สิ่งนี้อาจสังเกตเห็นได้ยากเนื่องจาก IDE อาจเรียกใช้ปัญหาโดยไม่ต้องทดสอบเช่นเดียวกับการทดสอบ JUnit4


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.