Maven không tìm thấy các bài kiểm tra JUnit để chạy


416

Tôi có một chương trình maven, nó biên dịch tốt. Khi tôi chạy, mvn testnó không chạy bất kỳ kiểm tra nào (dưới tiêu đề TESTs nói There are no tests to run.).

Tôi đã tạo lại vấn đề này với một thiết lập siêu đơn giản mà tôi sẽ bao gồm bên dưới cũng như đầu ra khi chạy với -X.

Các thử nghiệm đơn vị chạy tốt từ nhật thực (cả với gói Junit mặc định của nó và khi tôi thay vào đó bao gồm cả Junit.jar được tải xuống bởi maven). Ngoài ra mvn test-compilechính xác tạo lớp dưới lớp kiểm tra. Tôi đang chạy cái này trên OSX 10.6.7 với Maven 3.0.2 và java 1.6.0_24.

Đây là cấu trúc thư mục:

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

Kết thúc bài kiểm tra 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] ------------------------------------------------------------------------

Câu trả lời:


667

Theo mặc định, Maven sử dụng các quy ước đặt tên sau đây khi tìm kiếm các bài kiểm tra để chạy:

Nếu lớp thử nghiệm của bạn không tuân theo các quy ước này, bạn nên đổi tên nó hoặc định cấu hình Plugin Maven Surefire để sử dụng một mẫu khác cho các lớp thử nghiệm.


4
Tôi thấy nó hấp dẫn hơn để thay đổi cấu hình maven. Quy ước đặt tên này gây ra một số nguy hiểm cho người dùng chưa có kinh nghiệm. Đặt tên cho các testcase của bạn như SomethingTest1, SomethingTest2 sẽ dẫn đến các thử nghiệm âm thầm không được thực hiện. Maven không thể làm điều này để tương thích ngược nhưng nó có nhiều logic hơn để tìm kiếm các testcase trong tất cả các tệp.
Tobias Kremer

8
Tôi chưa bao giờ biết điều này - đã có hai trường hợp kết thúc bằng "Thử nghiệm" và maven từ chối chạy chúng ... đổi thành "Thử nghiệm", và tất cả đều tốt trong bang hội kẹo mút một lần nữa. Cảm ơn.
demaniak

2
@Tobias Tôi đồng ý với quan điểm của bạn về sự nguy hiểm áp đặt với quy ước đặt tên. Nó cũng phá vỡ mô hình ngụ ý bằng cách sử dụng các chú thích. Một kết quả ngầm định của việc sử dụng các chú thích là các lớp / phương thức có một chú thích cụ thể có thể được tìm kiếm. Tôi đã hy vọng rằng Maven đã không áp dụng hạn chế quy ước đặt tên và thay vào đó chỉ dựa vào việc quét các phương thức chú thích @Test trong bất kỳ lớp nào.
Angad

2
Lưu ý rằng tài liệu chắc chắn bây giờ tuyên bố đó **/*Tests.javalà một mặc định bao gồm!
Gareth

11
Câu hỏi: Vậy tại sao lại chú thích với @test nếu bạn phải tuân theo quy ước Test *?
dynex

88

Tôi cũng thấy rằng mã kiểm tra đơn vị nên đặt trong thư mục kiểm tra, nó không thể được nhận dạng là lớp kiểm tra nếu bạn đặt nó trong thư mục chính. ví dụ.

Sai lầm

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

Đúng

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

3
Cảm ơn bạn Điều này và thiết lập phạm vi để kiểm tra ( <scope>test<scope>) trong pom.xmltệp đã làm điều đó cho tôi.
dineshar camera

Tôi chạy vào đây, coi chừng kiểm tra vs kiểm tra. Bài kiểm tra phù hợp
Bruck Wubete

72

Một điều nữa có thể khiến Maven không tìm thấy các thử nghiệm nếu bao bì của mô-đun không được khai báo chính xác.

Trong một trường hợp gần đây, ai đó đã có <packaging>pom</packaging>và các bài kiểm tra của tôi không bao giờ chạy. Tôi đã thay đổi nó <packaging>jar</packaging>và bây giờ nó hoạt động tốt.


4
Đề nghị tuyệt vời! Thể hiện sự nguy hiểm của 'sao chép-dán' khi chia một tạo tác Maven mô-đun đơn thành nhiều phần.
morsor

4
Tôi muốn maven in một tin nhắn - package type is pom - so not running tests- để cung cấp một số manh mối cho các nhà phát triển :(
Arun Avanathan

60

CẬP NHẬT:

Giống như @scottyseus đã nói trong các bình luận, bắt đầu từ Maven Surefire 2.22.0 sau đây là đủ:

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

Khi sử dụng JUnit 5, tôi gặp vấn đề tương tự. Maven Surefire cần một plugin để chạy thử nghiệm JUnit 5. Thêm cái này vào 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>

Nguồn: https://junit.org/junit5/docs/civerse/user-guide/#rasty-tests-build-maven


Tôi nhận được một "không tìm thấy" cho junit-platform-surefire-provider.
Arya Pourtabatabaie

2
Lưu ý rằng với Surefire 2.22, không cần thiết phải thêm phụ thuộc vào surefire-providerhoặc jupiter-enginetạo tác. Các bài kiểm tra của tôi dường như chạy tốt mà không có chúng, ít nhất. thấy câu trả lời này .
scottysseus

Cũng cần lưu ý rằng bạn phải sử dụng org.junit.jupiter.api.Testthay vì org.junit.Testkhi sử dụng plugin này hoặc các bài kiểm tra sẽ không được tìm thấy.
austin_ce

30

Ngoài ra, hãy kiểm tra xem thư mục lớp kiểm tra của bạn (ví dụ: src / test / java) có tương ứng với thư mục được liệt kê trong thuộc tính <testSourceDirectory>trong tệp pom.xml của bạn dưới thuộc <build>tính không. Mất một lúc tôi mới thấy điều đó.


13

Maven sẽ không chạy thử nghiệm của bạn nếu dự án có <packaging>pom</packaging>

Bạn cần đặt bao bì thành jar (hoặc một số loại tạo tác java khác) để chạy thử: <packaging>jar</packaging>


12

Trong trường hợp của tôi, nó đã thêm động cơ Junit-vintage giúp nó tương thích với các phiên bản thử nghiệm JUnit cũ hơn và có thể chạy chúng. Như tôi đang sử dụng JUnit 5.

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

Tôi nghĩ SpringBoot chỉ bao gồm những gì nó sử dụng. Nó có ý nghĩa rằng bạn phải xác định phụ thuộc của bạn theo nhu cầu của bạn. Nếu không, bạn sẽ nhập toàn bộ thư viện mà bạn không sử dụng.
Đức Trần

12

Nhiều câu trả lời trong số này khá hữu ích với tôi trong quá khứ, nhưng tôi muốn thêm một kịch bản bổ sung khiến tôi mất một thời gian, vì nó có thể giúp những người khác trong tương lai:

Hãy chắc chắn rằng các lớp và phương thức kiểm tra là công khai.

Vấn đề của tôi là tôi đã sử dụng tính năng tạo lớp / phương thức kiểm tra tự động của IDE (IntelliJ) và vì một lý do nào đó, nó đã tạo ra chúng dưới dạng gói riêng tư. Tôi thấy điều này dễ bỏ lỡ hơn người ta mong đợi.


1
Đây cũng là vấn đề mà tôi gặp phải, vì một số lý do, IntelliJ đang tạo ra các thử nghiệm dưới dạng gói riêng tư và Maven không thể nhìn thấy chúng. Thay đổi lớp và phương thức @Test thành maven công khai thực hiện các bài kiểm tra.
AlexC

Giải quyết vấn đề của tôi! Lưu ý rằng điều này không áp dụng cho JUnit 5+. Tôi đoán trình tạo mã của IntelliJ giả định rằng bạn đang sử dụng phiên bản mới nhất.
lamino

@lamino Tôi đã sử dụng Junit5 và nó đã thất bại vì phương pháp thử nghiệm của tôi không công khai
SudhirKumar

Một chút táo tợn từ IntelliJ để nói với tôi rằng các phương thức có thể là gói riêng tư ..
Wecherowski

9

Kiểm tra xem (đối với plugin jUnit - 4.12 và Eclipse chắc chắn)

  1. Thêm phiên bản jUnit cần thiết trong POM.xml trong phần phụ thuộc. Do Maven -> Cập nhật dự án để xem các lọ cần thiết được xuất trong dự án.
  2. Lớp kiểm tra nằm dưới thư mục src / test / java và các thư mục con của thư mục này (hoặc thư mục cơ sở có thể được chỉ định trong POM trong config testSourceDirectory). Tên của lớp nên có từ đuôi 'Kiểm tra'.
  3. Phương thức kiểm tra trong lớp kiểm tra nên có chú thích @Test

1
Đây là vấn đề cấu hình java nhiều hơn, nhưng ngoài việc đặt tên lớp kiểm tra đúng cách và đặt tệp kiểm tra vào thư mục kiểm tra theo src, tên gói của lớp kiểm tra phải khớp với tên gói của lớp bạn đang kiểm tra.
Paul

2
@Paul Sai - Maven sẽ thực thi tất cả các lớp khớp với quy ước theosrc/test/java . Quy ước gói dành cho cấu trúc và cho phép kiểm tra quyền truy cập vào các phương thức gói riêng.
Michael K


6

Tôi đấu tranh với vấn đề này. Trong trường hợp của tôi, tôi đã không nhập đúng @Test chú thích .

1) Kiểm tra xem @Test có từ org.junit.jupiter.api.Test không (nếu bạn đang sử dụng Junit 5).

2) Với Junit5 thay vì @RunWith(SpringRunner.class), sử dụng@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

Nếu bạn có một ứng dụng Java / Groovy được chia sẻ và tất cả những gì bạn có là các thử nghiệm đơn vị Groovy, thì Maven sẽ không tìm thấy bất kỳ thử nghiệm nào. Điều này có thể được khắc phục bằng cách thêm một bài kiểm tra đơn vị theo src / test / java.


4

Tôi cũng gặp vấn đề tương tự, sau khi khám phá thấy rằng sự phụ thuộc testng đang gây ra vấn đề này. Sau khi loại bỏ sự phụ thuộc testng khỏi pom (vì tôi không cần nó nữa), nó bắt đầu hoạt động tốt với tôi.

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

4

Nếu bạn đã tạo một Spring Bootứng dụng bằng Spring Initializr , các bài kiểm tra sẽ chạy ngay từ Intellij Idea. Nhưng, nếu cố gắng chạy thử nghiệm từ một dòng lệnh:

mvn clean test

Bạn có thể đã ngạc nhiên, rằng không có bài kiểm tra nào được chạy cả. Tôi đã cố gắng để thêm surefire pluginkhông có may mắn. Câu trả lời rất đơn giản:pom.xml chứa các phụ thuộc sau:

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

Loại trừ, junit-vintage-engineđược dành riêng để giữ khả năng tương thích ngược với JUnit 4.x. Vì vậy, các phiên bản mới của Spring Boot Initializr không hỗ trợ nó theo mặc định. Sau khi tôi loại bỏ loại trừ, Mavenbắt đầu xem các thử nghiệm của dự án.


3

Nếu tên lớp kiểm tra của bạn không tuân theo quy ước đặt tên tiêu chuẩn (như được tô sáng bởi @axtavt ở trên), bạn cần thêm tên mẫu / tên lớp pom.xmlđể Maven chọn thử nghiệm -

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

nên là

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

Maven tìm thấy các kết thúc Kiểm tra hoặc bắt đầu với Kiểm tra để chạy tự động.

Tuy nhiên, bạn có thể sử dụng

mvn surefire:test -Dtest=ClassUnderTestTests.java 

để chạy thử nghiệm của bạn.


2

Đây là mã chính xác mà tôi phải thêm vào tệp pom.xml của mình:

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

Và đây là sự phụ thuộc của tôi:

    <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

Tôi đã đối mặt với cùng một vấn đề, nó được giải quyết bằng cách thay đổi bên dưới trong pom.xml:

<build>
    <testSourceDirectory>test</testSourceDirectory>

...

thay đổi để:

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

1

Một lý do khác để không chạy các trường hợp thử nghiệm đã xảy ra với tôi - tôi có một thuộc tính có tên là "thử nghiệm" cho các mục đích hoàn toàn khác nhau, nhưng nó đã can thiệp vào plugin chắc chắn. Vì vậy, vui lòng kiểm tra POM của bạn để biết:

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

và loại bỏ nó.


1

Thêm một mẹo nữa (ngoài các câu trả lời trước):

Trong Eclipse, đi đến Thuộc tính của dự án> bấm Run/Debug Settings:

"Trang này cho phép bạn quản lý các cấu hình khởi chạy với tài nguyên hiện được chọn"

Trong đó, bạn có thể thêm (Mới ...) hoặc xóa (Xóa) bất kỳ bài kiểm tra JU (JUnit) nào bạn có trong dự án của mình (trong src/test/javathư mục hoặc khóa học).


1

Nếu bạn đã viết các bài kiểm tra của mình trong JUnit 4 và thêm các phụ thuộc JUnit 5 vào plugin Surefire, các bài kiểm tra của bạn sẽ không chạy.

Trong trường hợp đó, chỉ cần nhận xét các phụ thuộc JUnit 5 từ 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

Theo sau làm việc tốt cho tôi trong Junit 5

https://junit.org/junit5/docs/civerse/user-guide/#rasty-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

Trong trường hợp của tôi, chúng tôi là ứng dụng đa mô hình di chuyển sang Spring Boot. Thật không may, maven đã không thực hiện tất cả các bài kiểm tra nữa trong các mô-đun. Việc đặt tên của các lớp kiểm tra không thay đổi, chúng tôi đang tuân theo các quy ước đặt tên.

Cuối cùng, nó đã giúp, khi tôi thêm phần phụ thuộc surefire-junit47vào plugin maven-surefire-plugin. Nhưng tôi không thể giải thích, tại sao, đó là bản dùng thử và lỗi:

<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

Tôi đã chạy các trường hợp thử nghiệm Junit-5 với maven 3.6.2 và nó luôn hiển thị Chạy thử: 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] ------------------------------------------------------------------------

Các bài kiểm tra Junt-5 không chạy dưới liên kết maven đã lưu ngày của tôi.


0

junitArtifactNamecũng có thể là trường hợp nếu JUnit đang sử dụng không phải là tiêu chuẩn ( junit:junit) mà là ...

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

0

Trong trường hợp ai đó đã tìm kiếm và tôi không giải quyết được, tôi đã có một thư viện cho các thử nghiệm khác nhau:

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

Khi tôi cài đặt Junit, mọi thứ đều hoạt động, tôi hy vọng và giúp điều này:

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

0

tôi đã sử dụng mã này

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

với tệp pom.xml của tôi, chỉ cần đảm bảo rằng tệp testng cụ thể ở đó

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

0

Sự cố như vậy có thể xảy ra khi bạn sử dụng plugin lướt web 3.x.x + với JUnit5 và do nhầm lẫn chú thích lớp kiểm tra với @Test chú thích từ JUnit4.

Sử dụng: org.junit.jupiter.api.Test(JUnit5) thay vìorg.junit.Test (Junit4)

LƯU Ý: điều này có thể khó nhận thấy vì IDE có thể chạy các vấn đề không liên quan này giống như thử nghiệm JUnit4.


0

Một vấn đề khác dễ bị bỏ qua - Đảm bảo tệp của lớp bạn có phần mở rộng .java

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.