Saya baru mengenal Gradle. Saya menggunakan Gradle 1.10 dan Ubuntu 13.
Saya ingin tahu apakah ada perintah untuk mengeksekusi hanya satu kelas uji lokal , mirip dengan 'testonly' di SBT.
Saya baru mengenal Gradle. Saya menggunakan Gradle 1.10 dan Ubuntu 13.
Saya ingin tahu apakah ada perintah untuk mengeksekusi hanya satu kelas uji lokal , mirip dengan 'testonly' di SBT.
Jawaban:
Untuk menjalankan kelas tes tunggal, jawaban Airborn baik.
Dengan menggunakan beberapa opsi baris perintah, yang ditemukan di sini , Anda dapat melakukan sesuatu seperti ini.
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
Dari versi 1.10 gradle mendukung uji pilih, menggunakan filter uji . Sebagai contoh,
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"
}
}
Untuk lingkungan multi-rasa (kasus penggunaan umum untuk Android), periksa jawaban ini , karena --tests
argumennya tidak didukung dan Anda akan mendapatkan kesalahan.
--tests
untuk memanggil metode tes tunggal di dalam kelas, maka kita melihat iterasi di semua kelas bahkan semua yang tidak dijalankan, yang terlalu lambat. Tidak tahu apakah kelambatan itu disebabkan oleh env kami atau apakah itu akan berdampak pada orang lain. Dapat memperbarui jika menemukan lebih banyak.
Anda dapat melakukannya gradle -Dtest.single=ClassUnderTestTest test
jika Anda ingin menguji kelas tunggal atau menggunakan regexp seperti gradle -Dtest.single=ClassName*Test test
Anda dapat menemukan lebih banyak contoh kelas penyaringan untuk tes di bawah bagian tautan ini 23.12. Uji.
--tests
opsi baris perintah, yang diatur untuk diganti -DtestTaskName.single
.
--test
opsi ini, Anda juga dapat membatasi pengujian ke satu metode di dalam kelas pengujian Anda. Misalnya: gradle test --tests *MyTest.someMethod
hanya akan menjalankan tes tunggal di someMethod
dalam MyTest
kelas Anda . Saat saya sedang membangun sebuah test case, saya biasanya menjalankan satu metode pada satu waktu untuk membuatnya lebih mudah untuk fokus hanya pada output yang saya butuhkan untuk debug, kemudian jalankan seluruh test case di akhir.
gradle -D:submodule:test.single=ClassUnderTestTest :submodule:test
. Lihat diskusi ini di gradle.org
--no-rebuild
opsi, misalnya gradle -D:submodule:test.single=ClassUnderTestTest --no-rebuild :submodule:test
untuk mencegah agar dependensi tidak dibangun kembali, dan pada gilirannya untuk menjalankan tes tunggal itu lebih cepat.
Jika Anda memiliki proyek multi-modul:
katakanlah struktur modul Anda
root-module
-> a-module
-> b-module
dan tes (testToRun) yang ingin Anda jalankan adalah dalam b-module, dengan path lengkap: com.xyz.b.module.TestClass.testToRun
Karena di sini Anda tertarik untuk menjalankan tes dalam b-module, jadi Anda harus melihat tugas yang tersedia untuk b-module.
./gradlew :b-module:tasks
Perintah di atas akan mencantumkan semua tugas dalam b-module dengan deskripsi. Dan dalam kasus yang ideal, Anda akan memiliki tes tugas bernama untuk menjalankan tes unit dalam modul itu.
./gradlew :b-module:test
Sekarang, Anda telah mencapai titik untuk menjalankan semua tes dalam b-module, akhirnya Anda dapat meneruskan parameter ke tugas di atas untuk menjalankan tes yang cocok dengan pola jalur tertentu
./gradlew :b-module:test --tests "com.xyz.b.module.TestClass.testToRun"
Sekarang, alih-alih ini jika Anda menjalankan
./gradlew test --tests "com.xyz.b.module.TestClass.testToRun"
Ini akan menjalankan tugas tes untuk kedua modul a dan b, yang dapat mengakibatkan kegagalan karena tidak ada yang cocok dengan pola di atas dalam modul-a.
./gradlew :b-module:test --tests testToRun
Setelah banyak mencari tahu, yang berikut ini berhasil untuk saya:
gradle test --tests "a.b.c.MyTestFile.mySingleTest"
Harap perhatikan bahwa --tests
opsi mungkin tidak berfungsi jika Anda memiliki bangunan yang berbeda types/flavors
(gagal dengan Unknown command-line option '--tests'
). Dalam hal ini, perlu untuk menentukan tugas tes tertentu (misalnya, testProdReleaseUnitTest
bukan hanya test
)
./gradlew test --tests *testMyCollectionTake*
dan saya tidak tahu bagaimana saya harus mengganti test
dengan nama tes wildcarded
Di bawah ini adalah perintah untuk menjalankan kelas uji tunggal menggunakan gradlew
opsi baris perintah:
gradlew.bat Connected**your bundleVariant**AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass
Di bawah ini contoh untuk menjalankan kelas com.example.TestClass
dengan varian Variant_1
:
gradlew.bat ConnectedVariant_1AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass
Dalam kasus saya, peringatan kompiler java gerhana saya ditetapkan terlalu tinggi, dan gerhana tidak mengenali kelas saya sebagai valid untuk dieksekusi. Memperbarui pengaturan kompiler saya memperbaiki masalahnya. Anda dapat membaca lebih lanjut tentang hal ini di sini: anotasi-nonnull-tidak dapat diselesaikan