Gradle'da yeniyim. Gradle 1.10 ve Ubuntu 13 kullanıyorum.
SBT'de 'testonly'ye benzer, sadece bir yerel test sınıfı yürütmek için herhangi bir komut olup olmadığını bilmek istiyorum .
Gradle'da yeniyim. Gradle 1.10 ve Ubuntu 13 kullanıyorum.
SBT'de 'testonly'ye benzer, sadece bir yerel test sınıfı yürütmek için herhangi bir komut olup olmadığını bilmek istiyorum .
Yanıtlar:
Tek bir test sınıfı çalıştırmak Airborn'un cevabı iyidir.
Burada bulunan bazı komut satırı seçeneklerini kullanarak , böyle bir şey yapabilirsiniz.
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
Sınıfın 1.10 versiyonundan bir test filtresi kullanarak testlerin seçilmesini destekler . Örneğin,
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"
}
}
Çok lezzet ortamlar (Android için ortak kullanım-case) için, bu cevabı kontrol olarak, --tests
argüman için desteği ve bir hata alırsınız.
--tests
sınıf içinde tek bir test yöntemini çağırmak için kullansanız bile , o zaman çok yavaş olan tüm sınıflar üzerinde bile yineleme görüyoruz. Bu yavaşlığın kıskançlığımızdan mı kaynaklandığını veya başkalarını etkileyip etkilemeyeceğini bilmiyorum. Daha fazlası bulunursa güncellenebilir.
Sen yapabilirsin gradle -Dtest.single=ClassUnderTestTest test
sen gibi tek sınıf veya kullanım Regexp'i test etmek istiyorsanız gradle -Dtest.single=ClassName*Test test
size testler için sınıfları filtreleme daha fazla örnek bulabilirsiniz bu bağlantıyı altında bölüm 23,12. Ölçek.
--tests
, değiştirilmek üzere ayarlanmış bir komut satırı seçeneğini destekler -DtestTaskName.single
.
--test
seçenekle, testi test sınıfınızdaki tek bir yöntemle sınırlayabilirsiniz. Örneğin: gradle test --tests *MyTest.someMethod
sadece tek bir test çalışacaktır someMethod
senin içinde MyTest
sınıfta. Bir test senaryosu oluşturduğum için, yalnızca hata ayıklamak için ihtiyacım olan çıktıya odaklanmayı kolaylaştırmak için bir seferde tek bir yöntem çalıştırıyorum, sonra sonunda tüm test senaryosunu çalıştırıyorum.
gradle -D:submodule:test.single=ClassUnderTestTest :submodule:test
. Bkz gradle.org Bu tartışmaya
--no-rebuild
, örneğin gradle -D:submodule:test.single=ClassUnderTestTest --no-rebuild :submodule:test
bağımlılıkların yeniden oluşturulmasını önlemek ve bu tek testi daha hızlı yürütmek için bir seçenek kullanmak isteyebilirsiniz .
Çok modüllü bir projeniz varsa:
diyelim ki modül yapınız
root-module
-> a-module
-> b-module
ve çalıştırmak istediğiniz test (testToRun) tam yol ile b modülünde: com.xyz.b.module.TestClass.testToRun
Burada testi b-modülünde çalıştırmakla ilgileniyorsunuz, bu yüzden b-modülü için mevcut görevleri görmelisiniz.
./gradlew :b-module:tasks
Yukarıdaki komut b modülündeki tüm görevleri açıklamalı olarak listeler. İdeal durumda, bu modüldeki birim testlerini çalıştırmak için test adlı bir göreve sahip olursunuz .
./gradlew :b-module:test
Şimdi, tüm testleri b modülünde çalıştırma noktasına ulaştınız, son olarak belirli yol modeliyle eşleşen testleri çalıştırmak için yukarıdaki göreve bir parametre iletebilirsiniz.
./gradlew :b-module:test --tests "com.xyz.b.module.TestClass.testToRun"
Şimdi, bunun yerine koşarsan
./gradlew test --tests "com.xyz.b.module.TestClass.testToRun"
Hem modül a hem de b için test görevini çalıştırır, bu da bir modülde yukarıdaki desenle eşleşen hiçbir şey olmadığından hataya neden olabilir.
./gradlew :b-module:test --tests testToRun
Çok düşündükten sonra, aşağıdakiler benim için çalıştı:
gradle test --tests "a.b.c.MyTestFile.mySingleTest"
--tests
Farklı derlemeniz varsa types/flavors
(başarısız olursa Unknown command-line option '--tests'
) seçeneğin çalışmayabileceğini lütfen unutmayın . Bu durumda, belirli test görevini belirtmek gerekir (örneğin testProdReleaseUnitTest
, sadece yerine test
)
./gradlew test --tests *testMyCollectionTake*
nasıl değiştirmeliyim söyleyememtest
gradlew
Komut satırı seçeneğini kullanarak tek bir test sınıfı çalıştırma komutu aşağıdadır :
gradlew.bat Connected**your bundleVariant**AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass
Sınıfı com.example.TestClass
varyant ile çalıştırmak için aşağıdaki örnek Variant_1
:
gradlew.bat ConnectedVariant_1AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass
Benim durumumda, eclipse java derleyici uyarılarım çok yüksek ayarlanmıştı ve eclipse sınıfımı yürütme için geçerli olarak tanımıyordu. Derleyici ayarlarımı güncellemek sorunu çözdü. Bununla ilgili daha fazla bilgiyi buradan edinebilirsiniz: ek açıklama-nonnull-çözülemez