ฉันรู้ว่าคุณสามารถทำการทดสอบทั้งหมดในระดับหนึ่งโดยใช้:
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
ไวยากรณ์ได้