ฉันใหม่กับ Gradle ฉันใช้ Gradle 1.10 และ Ubuntu 13
ฉันต้องการที่จะทราบว่ามีคำสั่งใด ๆ ในการดำเนินการเพียงคนเดียวในท้องถิ่นระดับทดสอบคล้ายกับ 'testonly ใน SBT
ฉันใหม่กับ Gradle ฉันใช้ Gradle 1.10 และ Ubuntu 13
ฉันต้องการที่จะทราบว่ามีคำสั่งใด ๆ ในการดำเนินการเพียงคนเดียวในท้องถิ่นระดับทดสอบคล้ายกับ 'testonly ใน SBT
คำตอบ:
เมื่อต้องการเรียกใช้คำตอบของ Airborn คลาสการทดสอบเดียวเป็นสิ่งที่ดี
ด้วยการใช้ตัวเลือกบรรทัดคำสั่งซึ่งพบได้ที่นี่คุณสามารถทำสิ่งนี้ได้
gradle test --tests org.gradle.SomeTest.someSpecificFeature
gradle test --tests *SomeTest.someSpecificFeature
gradle test --tests *SomeSpecificTest
gradle test --tests all.in.specific.package*
gradle test --tests *IntegTest
gradle test --tests *IntegTest*ui*
gradle test --tests *IntegTest.singleMethod
gradle someTestTask --tests *UiTest someOtherTestTask --tests *WebTest*ui
จาก 1.10 รุ่นของ gradle จะสนับสนุนการทดสอบการเลือกใช้ตัวกรองการทดสอบ ตัวอย่างเช่น,
apply plugin: 'java'
test {
filter {
//specific test method
includeTestsMatching "org.gradle.SomeTest.someSpecificFeature"
//specific test method, use wildcard for packages
includeTestsMatching "*SomeTest.someSpecificFeature"
//specific test class
includeTestsMatching "org.gradle.SomeTest"
//specific test class, wildcard for packages
includeTestsMatching "*.SomeTest"
//all classes in package, recursively
includeTestsMatching "com.gradle.tooling.*"
//all integration tests, by naming convention
includeTestsMatching "*IntegTest"
//only ui tests from integration tests, by some naming convention
includeTestsMatching "*IntegTest*ui"
}
}
สำหรับสภาพแวดล้อมหลากหลายรสชาติ (กรณีการใช้งานทั่วไปสำหรับ Android) ให้ตรวจสอบคำตอบนี้เนื่องจาก--tests
อาร์กิวเมนต์จะไม่ได้รับการสนับสนุนและคุณจะได้รับข้อผิดพลาด
--tests
ในการเรียกวิธีการทดสอบเดียวในชั้นเรียนเราจะเห็นการวนซ้ำในทุกชั้นเรียนแม้ทั้งหมดที่ไม่ได้ทำงานซึ่งช้าเกินไป ไม่ทราบว่าความช้านั้นเกิดจากความอิจฉาของเราหรือไม่ สามารถอัปเดตหากค้นหาเพิ่มเติม
คุณสามารถทำได้gradle -Dtest.single=ClassUnderTestTest test
ถ้าคุณต้องการทดสอบชั้นเดียวหรือใช้ regexp เช่นเดียวกับที่gradle -Dtest.single=ClassName*Test test
คุณสามารถหาตัวอย่างเพิ่มเติมของชั้นเรียนกรองสำหรับการทดสอบภายใต้ลิงค์นี้ส่วน 23.12 ทดสอบ.
--tests
-DtestTaskName.single
--test
ตัวเลือกที่คุณสามารถ จำกัด การทดสอบเป็นวิธีการเดียวในชั้นเรียนทดสอบของคุณ ตัวอย่างเช่น gradle test --tests *MyTest.someMethod
จะทำการทดสอบเพียงครั้งเดียวsomeMethod
ในMyTest
ชั้นเรียนของคุณ ในขณะที่ฉันกำลังสร้างกรณีทดสอบฉันมักจะเรียกใช้วิธีการเดียวในแต่ละครั้งเพื่อให้ง่ายต่อการมุ่งเน้นไปที่ผลลัพธ์ที่ฉันต้องการในการดีบักจากนั้นจึงเรียกใช้กรณีทดสอบทั้งหมดในตอนท้าย
gradle -D:submodule:test.single=ClassUnderTestTest :submodule:test
นอกจากนี้ยังเป็นที่น่าสังเกตว่าถ้าคุณต้องการที่จะเรียกใช้การทดสอบเดียวในโครงการหลายโมดูลแล้วคำสั่ง ดูการสนทนานี้ใน gradle.org
--no-rebuild
ตัวเลือกเช่นgradle -D:submodule:test.single=ClassUnderTestTest --no-rebuild :submodule:test
เพื่อป้องกันการพึ่งพาสร้างขึ้นมาใหม่และเพื่อดำเนินการทดสอบเดียวที่รวดเร็วขึ้น
ในกรณีที่คุณมีโครงการหลายโมดูล:
ให้เราบอกว่าโครงสร้างโมดูลของคุณคืออะไร
root-module
-> a-module
-> b-module
และการทดสอบ (testToRun) ที่คุณต้องการเรียกใช้อยู่ในโมดูล b โดยมีพา ธ เต็ม: com.xyz.b.module.TestClass.testToRun
ที่นี่คุณสนใจที่จะทำการทดสอบในโมดูล b ดังนั้นคุณควรเห็นงานที่มีสำหรับโมดูล b
./gradlew :b-module:tasks
คำสั่งด้านบนจะแสดงรายการงานทั้งหมดในโมดูล b พร้อมคำอธิบาย และในกรณีที่เหมาะสมที่สุดคุณจะมีภารกิจชื่อทดสอบเพื่อเรียกใช้การทดสอบหน่วยในโมดูลนั้น
./gradlew :b-module:test
ทีนี้คุณมาถึงจุดที่จะทำการทดสอบทั้งหมดในโมดูล b แล้วในที่สุดคุณก็สามารถส่งพารามิเตอร์ไปยังงานข้างต้นเพื่อทำการทดสอบที่ตรงกับรูปแบบของเส้นทาง
./gradlew :b-module:test --tests "com.xyz.b.module.TestClass.testToRun"
ตอนนี้แทนที่จะเป็นแบบนี้ถ้าคุณวิ่ง
./gradlew test --tests "com.xyz.b.module.TestClass.testToRun"
มันจะรันงานทดสอบสำหรับทั้งโมดูล a และ b ซึ่งอาจส่งผลให้เกิดความล้มเหลวเนื่องจากไม่มีสิ่งใดที่ตรงกับรูปแบบข้างต้นในโมดูล
./gradlew :b-module:test --tests testToRun
หลังจากหาคำตอบได้มากแล้ว
gradle test --tests "a.b.c.MyTestFile.mySingleTest"
โปรดทราบว่า--tests
ตัวเลือกอาจไม่ทำงานหากคุณมีบิลด์ที่แตกต่างtypes/flavors
(ล้มเหลวUnknown command-line option '--tests'
) ในกรณีนี้จำเป็นต้องระบุงานทดสอบเฉพาะ (เช่นtestProdReleaseUnitTest
แทนที่จะเป็นแค่test
)
./gradlew test --tests *testMyCollectionTake*
และฉันไม่สามารถบอกได้ว่าฉันควรแทนที่test
ด้วยชื่อการทดสอบไวด์การ์ด
ด้านล่างเป็นคำสั่งให้รันคลาสทดสอบเดียวโดยใช้gradlew
ตัวเลือกบรรทัดคำสั่ง:
gradlew.bat Connected**your bundleVariant**AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass
ตัวอย่างด้านล่างเพื่อเรียกใช้คลาสที่com.example.TestClass
มีชุดตัวเลือกVariant_1
:
gradlew.bat ConnectedVariant_1AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass
คุณควรลองใส่เครื่องหมายดอกจัน (*) ลงท้าย
การทดสอบเกรด - ทดสอบ "com.abc *"
รันการทดสอบเดี่ยวชื่อ MyTest:
./gradlew app:testDebug --tests=com.example.MyTest
ในกรณีของฉันคำเตือนคอมไพเลอร์ eclipse java ของฉันถูกตั้งค่าไว้สูงเกินไปและ eclipse ไม่รู้จักคลาสของฉันว่าถูกต้องสำหรับการดำเนินการ การอัปเดตการตั้งค่าคอมไพเลอร์ของฉันแก้ไขปัญหาได้ คุณสามารถอ่านเพิ่มเติมได้ที่นี่: annotation-nonnull-ไม่สามารถแก้ไขได้