Chạy một phương thức thử nghiệm duy nhất với maven


519

Tôi biết bạn có thể chạy tất cả các bài kiểm tra trong một lớp nhất định bằng cách sử dụng:

mvn test -Dtest=classname

Nhưng tôi muốn chạy một phương thức riêng lẻ và -Dtest = classname.methodname dường như không hoạt động.


3
Tôi cũng muốn biết làm thế nào để làm điều này. Tuy nhiên, nếu tôi thấy mình làm việc đó khá thường xuyên, tôi nghĩ rằng bài kiểm tra đó có thể là một ứng cử viên được tách ra thành lớp riêng của mình, vì vậy bạn có thể sử dụng mvn test -Dtest=classnamecú pháp.
John Paulett

Bạn có muốn biết làm thế nào để làm điều đó thông qua dòng lệnh chỉ ?? Hoặc sử dụng một IDE (nhật thực) sẽ làm việc cho bạn?
Diego Dias

1
Tôi đã nhìn vào một dòng lệnh. Tôi nghĩ rằng plugin nhật thực Junit sẽ cho phép bạn làm điều này.
Billman

Tôi đã làm điều này cho Maven 1. Khi tôi nhớ lại, nó liên quan đến việc thực hiện các thay đổi đối với JUnit, chịu trách nhiệm hướng nội lớp thử nghiệm.
kdgregory

Câu trả lời:


698

Để chạy một phương thức thử nghiệm duy nhất trong Maven, bạn cần cung cấp lệnh như:

mvn test -Dtest=TestCircle#xyz test

TestCircletên lớp thử nghiệm ở đâu và xyzlà phương thức thử nghiệm.

Nhân vật thẻ hoang dã cũng hoạt động; cả trong tên phương thức và tên lớp.

Nếu bạn đang thử nghiệm trong một dự án đa mô-đun, hãy chỉ định mô-đun mà thử nghiệm nằm trong -pl <module-name>.

Đối với thử nghiệm tích hợp sử dụng it.test=...tùy chọn thay vì test=...:

mvn -pl <module-name> -Dit.test=TestCircle#xyz integration-test

4
Đã sửa lỗi "Không kiểm tra đã được thực hiện" bằng cách hạ cấp xuống chắc chắn 2.9
qwerty

15
Tôi đã sửa "Không có bài kiểm tra nào được thực hiện!" bằng cách nâng cấp lên 2,14:
alfonx 17/03/13

54
Nếu bạn đang thử nghiệm trong một dự án đa mô-đun, bạn cũng cần chỉ định mô-đun mà thử nghiệm đang ở -pl <module-name>.
Jon

22
Sử dụng -DfailIfNoTests=falseđể bỏ qua các dự án mà không cần kiểm tra. No Tests Were Executedxảy ra khi bạn cố chạy thử nghiệm từ dự án gốc và có các mô-đun mà không có kiểm tra nào cả.
Cherry

4
Lệnh này hoạt động !! mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test Lưu ý rằng "-DTest" bắt đầu bằng UPPER CASE 'T'.
vikas

25

Có một vấn đề với chắc chắn 2.12. Đây là những gì xảy ra với tôi khi thay đổi maven-Surefire-plugin từ 2.12 thành 2.11:

  1. mvn test -Dtest=DesignRulesTest

    Kết quả:
    [ERROR] Không thể thực hiện mục tiêu org.apache.maven.plugins: maven-Surefire-plugin: 2.12 : test (default-test) trên dự án pmd: Không có thử nghiệm nào được thực hiện!

  2. mvn test -Dtest=DesignRulesTest

    Kết quả: [INFO] --- maven-Surefire-plugin: 2.11 : test (default-test) @ pmd --- ... Chạy net.sourceforge.pmd.lang.java.rule.design.DesignRulesTest Thử nghiệm chạy: 5 , Lỗi: 0, Lỗi: 0, Bỏ qua: 4, Thời gian trôi qua: 4.009 giây


5
Hoạt động trở lại trong 2.12.1 trở lên.
yurez

Đã sửa lỗi "Không có bài kiểm tra nào được thực hiện!" bằng cách nâng cấp lên 2,14
alfonx 17/03/13

Nếu bạn sử dụng @Category(IntegrationTest.class), hãy sử dụng -Dit.test=ClassName, nếu không bạn sẽ nhận được No tests were executed!ngay cả với các phiên bản plugin mới nhất.
uvsmtid

16

Những gì tôi làm với TestNG của mình, (xin lỗi, JUnit không hỗ trợ điều này) các trường hợp thử nghiệm là tôi có thể chỉ định một nhóm cho thử nghiệm mà tôi muốn chạy

@Test(groups="broken")

Và sau đó chỉ cần chạy 'mvn -Dgroups = hỏng'.


1
Đây là một câu trả lời tốt. Trong trường hợp của tôi, thử nghiệm đã cố chạy nhưng một số thành phần Seam không được thiết lập đúng nên có vẻ như điều này cũng đang bỏ qua một phần mã thiết lập.
Chris Williams

1
Chính xác. Bạn cần đặt các nhóm = bị hỏng trong @B BeforeMethod của bạn hoặc làm @B BeforeMethod (alwaysRun = true)
tunaranch

Xin vui lòng cho tôi biết nhóm ở đây là gì, vì tôi đang gặp vấn đề biên dịch.
Paramesh Korrakuti

14

Chạy một tập hợp các phương thức trong Lớp thử nghiệm đơn Với phiên bản 2.7.3, bạn chỉ có thể chạy n thử nghiệm trong một Lớp thử nghiệm duy nhất.

LƯU Ý: nó được hỗ trợ cho Junit 4.x và TestNG.

Bạn phải sử dụng cú pháp sau

mvn -Dtest=TestCircle#mytest test

Bạn cũng có thể sử dụng các mẫu

mvn -Dtest=TestCircle#test* test

Kể từ Surefire 2.12.1, bạn có thể chọn nhiều phương thức (chỉ JUnit4X tại thời điểm này, bản vá chào mừng)

mvn -Dtest=TestCircle#testOne+testTwo test

Kiểm tra liên kết này về các bài kiểm tra đơn


2
Trong trường hợp của tôi, tôi đã phải trích dẫn gấp đôi tên thử nghiệm TestClass # như mvn -Dtest = "TestCircle # myTest"
Pratik Khadloya

@PratikKhadloya Bạn có biết làm thế nào nó hoạt động cho các bài kiểm tra phụ thuộc không? Nói rằng, tôi có các phương thức test1 (), test2 (), test3 () trong TestClass và test2 phụ thuộc vào test1. Làm thế nào tôi có thể chạy chỉ test2 ()?
Ziska

3
Tôi nghĩ rằng nếu bạn có sự phụ thuộc trong các bài kiểm tra của mình, bạn đang làm sai điều gì đó. Mỗi bài kiểm tra nên độc lập với các bài kiểm tra khác. Bạn cần phải loại bỏ các khớp nối giữa chúng.
Pratik Khadloya

11

Bạn có thể chạy (các) lớp thử nghiệm cụ thể và (các) phương thức bằng cú pháp sau:

  1. gói đầy đủ: mvn test -Dtest = "com.oracle.tests. **"

  2. tất cả phương thức trong một lớp: mvn test -Dtest = CLASS_NAME1

  3. phương thức duy nhất từ ​​lớp đơn: mvn test -Dtest = CLASS_NAME1 # METHOD_NAME1

  4. nhiều phương thức từ nhiều lớp: mvn test -Dtest = CLASS_NAME1 # METHOD_NAME1, CLASS_NAME2 # METHOD_NAME2


10

Lệnh này hoạt động !! mvn "-DTest=JoinTeamTestCases#validateJoinTeam" testLưu ý rằng "-DTest" bắt đầu bằng UPPER CASE 'T'.


4
Liệu không làm việc với SureFire 2.18.x; nó chỉ chạy tất cả các bài kiểm tra.
Janaka Bandara

4

Các bài kiểm tra tham số được đề cập bởi tobrien phép bạn chỉ định một phương pháp sử dụng một # trước tên phương pháp. Điều này sẽ làm việc cho JUnit và TestNG. Tôi chưa bao giờ thử nó, chỉ cần đọc nó trên trang Surefire Plugin :

Chỉ định tham số này để chạy thử nghiệm riêng lẻ theo tên tệp, ghi đè các tham số bao gồm / loại trừ. Mỗi mẫu bạn chỉ định ở đây sẽ được sử dụng để tạo một mẫu bao gồm được định dạng như ** / $ {test} .java, vì vậy bạn chỉ cần nhập "-Dtest = MyTest" để chạy thử nghiệm duy nhất có tên là "foo / MyTest.java". Tham số này ghi đè các tham số bao gồm / loại trừ và tham số TestNG suiteXmlFiles. kể từ 2.7.3 Bạn có thể thực thi một số phương thức giới hạn trong thử nghiệm bằng cách thêm #myMethod hoặc # my * ethod. Loại Si "-Dtest = MyTest # myMethod" được hỗ trợ cho Junit 4.x và testNg



3

Kể từ phiên bản plugin chắc chắn 2.22.1 (có thể sớm hơn), bạn có thể chạy thử nghiệm đơn bằng cách sử dụng thuộc tính testnames khi sử dụng testng.xml

Đưa ra một testng.xml sau

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
    <test name="all-tests">
        <classes>
            <class name="server.Atest"/>
            <class name="server.Btest"/>
            <class name="server.Ctest"/>
        </classes>
    </test>
    <test name="run-A-test">
        <classes>
            <class name="server.Atest"/>
        </classes>
    </test>
    <test name="run-B-test">
        <classes>
            <class name="server.Btest"/>
        </classes>
    </test>
    <test name="run-C-test">
        <classes>
            <class name="server.Ctest"/>
        </classes>
    </test>
</suite> 

với tệp 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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    [...]
    <properties>
        <selectedTests>all-tests</selectedTests>
    </properties>
    [...]
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.1</version>
            <configuration>
                <suiteXmlFiles>
                    <file>src/test/resources/testng.xml</file>
                </suiteXmlFiles>
                <properties>
                    <property>
                        <name>testnames</name>
                        <value>${selectedTests}</value>
                    </property>
                </properties>
            </configuration>
        </plugin>
    </plugins>
    [...]
</project>

Từ dòng lệnh

mvn clean test -DselectedTests=run-B-test

Đọc thêm - Maven Surefire plugin sử dụng testng


-5

Bạn có thể chạy một lớp thử nghiệm, nhưng không phải là một phương thức trong một lớp thử nghiệm. Bạn sử dụng tên đơn giản của lớp chứ không phải tên đủ điều kiện của lớp. Vì vậy, nếu bạn có một bài kiểm tra trong "org.sonatype.test.MyTest" và đó là bài kiểm tra duy nhất bạn muốn chạy, dòng lệnh của bạn sẽ như thế này:

mvn test -Dtest=MyTest

Tôi đã thử nghiệm giải pháp được mô tả trên các bình luận trước đó trong một dự án mô-đun duy nhất, vì vậy những gì bình luận này nói là không đúng.
tonio

5
Nó có thể đúng trong năm 2009 khi trả lời ban đầu.
mạnh mẽ

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.