ฉันรู้ว่าคุณสามารถทำการทดสอบทั้งหมดในระดับหนึ่งโดยใช้:
mvn test -Dtest=classname
แต่ฉันต้องการเรียกใช้แต่ละวิธีและ -Dtest = classname.methodname ดูเหมือนจะไม่ทำงาน
ฉันรู้ว่าคุณสามารถทำการทดสอบทั้งหมดในระดับหนึ่งโดยใช้:
mvn test -Dtest=classname
แต่ฉันต้องการเรียกใช้แต่ละวิธีและ -Dtest = classname.methodname ดูเหมือนจะไม่ทำงาน
คำตอบ:
ในการรันวิธีทดสอบเดียวใน Maven คุณต้องระบุคำสั่งดังนี้:
mvn test -Dtest=TestCircle#xyz test
TestCircleชื่อคลาสทดสอบอยู่ที่ไหนและxyzเป็นวิธีการทดสอบ
อักขระไวด์การ์ดยังใช้งานได้; ทั้งในชื่อเมธอดและชื่อคลาส
-pl <module-name>หากคุณกำลังทดสอบในโครงการหลายโมดูลระบุโมดูลที่การทดสอบด้วย
สำหรับการทดสอบการรวมใช้it.test=...ตัวเลือกแทนtest=...:
mvn -pl <module-name> -Dit.test=TestCircle#xyz integration-test
              -pl <module-name>หากคุณกำลังทดสอบในโครงการหลายโมดูลคุณยังต้องระบุโมดูลที่การทดสอบด้วย
                    -DfailIfNoTests=falseเพื่อข้ามโครงการโดยไม่ต้องทดสอบ No Tests Were Executedเกิดขึ้นเมื่อคุณพยายามเรียกใช้การทดสอบจากโครงการรูทและมีโมดูลที่ไม่มีการทดสอบเลย
                    mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test   โปรดทราบว่า "-DTest" เริ่มต้นด้วยกรณีบน 'T'
                    มีปัญหากับ Surefire 2.12 นี่คือสิ่งที่เกิดขึ้นกับฉันในการเปลี่ยน maven-surefire-plugin จาก 2.12 เป็น 2.11:
mvn test -Dtest=DesignRulesTest
ผลลัพธ์:
[ข้อผิดพลาด] ล้มเหลวในการดำเนินการเป้าหมาย org.apache.maven.plugins: maven-surefire-plugin: 2.12 : การทดสอบ (ทดสอบเริ่มต้น) ในโครงการ pmd: ไม่มีการทดสอบใด ๆ !
mvn test -Dtest=DesignRulesTest
ผลลัพธ์: [INFO] --- maven-surefire-plugin: 2.11 : ทดสอบ (ค่าเริ่มต้น - ทดสอบ) @ pmd --- ... กำลังเรียกใช้ net.sourceforge.pmd.lang.java.rule.design.DesignRules การทดสอบการทดสอบ: 5 , ความล้มเหลว: 0, ข้อผิดพลาด: 0, ข้ามไป: 4, เวลาที่ผ่านไป: 4.009 วินาที
@Category(IntegrationTest.class)ให้ใช้-Dit.test=ClassNameมิฉะนั้นคุณจะได้No tests were executed!ใช้งานปลั๊กอินรุ่นล่าสุด
                    สิ่งที่ฉันทำกับ TestNG ของฉัน (ขออภัย JUnit ไม่สนับสนุนสิ่งนี้) กรณีทดสอบคือฉันสามารถกำหนดกลุ่มให้กับการทดสอบที่ฉันต้องการเรียกใช้
@Test(groups="broken")
จากนั้นเรียกใช้ 'mvn -Dgroups = broken'
การรันชุดเมธอดในคลาสการทดสอบเดี่ยวด้วยเวอร์ชัน 2.7.3 คุณสามารถรันการทดสอบ n เท่านั้นในคลาสการทดสอบเดียว
หมายเหตุ: รองรับ Junit 4.x และ TestNG
คุณต้องใช้ไวยากรณ์ต่อไปนี้
mvn -Dtest=TestCircle#mytest test
คุณสามารถใช้รูปแบบได้เช่นกัน
mvn -Dtest=TestCircle#test* test
ในขณะที่ surefire 2.12.1 คุณสามารถเลือกได้หลายวิธี (JUnit4X เท่านั้นในเวลานี้ยินดีต้อนรับการแก้ไข)
mvn -Dtest=TestCircle#testOne+testTwo test
ตรวจสอบลิงค์นี้เกี่ยวกับการทดสอบเดียว
คุณสามารถเรียกใช้คลาสการทดสอบและวิธีการเฉพาะโดยใช้ไวยากรณ์ต่อไปนี้:
แพ็คเกจเต็มรูปแบบ: การทดสอบ mvn -Dtest = "com.oracle.tests." "
วิธีการทั้งหมดในชั้นเรียน: ทดสอบ mvn -Dtest = CLASS_NAME1
วิธีการเดียวจากชั้นเดียว: การทดสอบ mvn -Dtest = CLASS_NAME1 # METHOD_NAME1
หลายวิธีจากหลายคลาส: ทดสอบ mvn -Dtest = CLASS_NAME1 # METHOD_NAME1, CLASS_NAME2 # METHOD_NAME2
คำสั่งนี้ใช้งานได้ !!
 mvn "-DTest=JoinTeamTestCases#validateJoinTeam" testโปรดทราบว่า "-DTest" เริ่มต้นด้วยกรณีบน 'T'
ทดสอบพารามิเตอร์กล่าวโดย tobrien ช่วยให้คุณระบุวิธีการใช้#ก่อนชื่อวิธี สิ่งนี้ควรใช้กับ JUnit และ TestNG ฉันไม่เคยลองเลยอ่านบนหน้าSurefire Plugin :
ระบุพารามิเตอร์นี้เพื่อรันการทดสอบแยกตามชื่อไฟล์การแทนที่พารามิเตอร์ include / แยก แต่ละรูปแบบที่คุณระบุที่นี่จะถูกใช้เพื่อสร้างรูปแบบการรวมที่จัดรูปแบบเช่น ** / $ {test} .java ดังนั้นคุณสามารถพิมพ์ "-Dtest = MyTest" เพื่อรันการทดสอบเดียวที่เรียกว่า "foo / MyTest.java" พารามิเตอร์นี้แทนที่พารามิเตอร์ include / แยกและพารามิเตอร์ TestNG suiteXmlFiles ตั้งแต่ 2.7.3 คุณสามารถดำเนินการตามจำนวนที่ จำกัด ในการทดสอบโดยเพิ่ม #myMethod หรือ # my * ethod พิมพ์ Si "-Dtest = MyTest # myMethod" สำหรับ junit 4.x และ testNg
เวอร์ชั่นใหม่ของ JUnit มีหมวดหมู่ Runner: http://kentbeck.github.com/junit/doc/ReleaseNotes4.8.html
แต่การปล่อยโพรซีเดอร์ของ JUnit ไม่ได้เป็น maven ดังนั้นผู้ใช้ maven ต้องวางมันลงในที่เก็บด้วยตนเอง
ในฐานะที่เป็นปลั๊กอิน surefire รุ่น 2.22.1 (อาจจะก่อนหน้านี้) คุณสามารถเรียกใช้การทดสอบเดียวโดยใช้คุณสมบัติ testnames เมื่อใช้ testng.xml
รับ testng.xml ต่อไปนี้
<?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> 
ด้วย 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>
จากบรรทัดคำสั่ง
mvn clean test -DselectedTests=run-B-test
อ่านเพิ่มเติม - Maven surefire plugin ใช้ testng
คุณสามารถเรียกใช้คลาสการทดสอบเดียว แต่ไม่สามารถใช้วิธีการเดียวภายในคลาสการทดสอบ คุณใช้ชื่อแบบง่ายของคลาสไม่ใช่ชื่อแบบเต็มของคลาส ดังนั้นหากคุณมีการทดสอบใน "org.sonatype.test.MyTest" และนั่นเป็นการทดสอบเดียวที่คุณต้องการเรียกใช้บรรทัดคำสั่งของคุณจะมีลักษณะดังนี้:
mvn test -Dtest=MyTest
              สำหรับความรู้ของฉันปลั๊กอิน surefireไม่มีวิธีการทำเช่นนี้ แต่อย่าลังเลที่จะเปิดปัญหา :)
mvn test -Dtest=classnameไวยากรณ์ได้