Tôi mới đến Gradle. Tôi sử dụng Gradle 1.10 và Ubuntu 13.
Tôi muốn biết nếu có bất kỳ lệnh nào chỉ thực hiện một lớp kiểm tra cục bộ , tương tự như 'testonly' trong SBT.
Tôi mới đến Gradle. Tôi sử dụng Gradle 1.10 và Ubuntu 13.
Tôi muốn biết nếu có bất kỳ lệnh nào chỉ thực hiện một lớp kiểm tra cục bộ , tương tự như 'testonly' trong SBT.
Câu trả lời:
Để chạy một lớp kiểm tra duy nhất Câu trả lời của Airborn là tốt.
Với việc sử dụng một số tùy chọn dòng lệnh, được tìm thấy ở đây , bạn có thể chỉ cần làm một cái gì đó như thế này.
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
Từ phiên bản 1.10 của lớp, nó hỗ trợ chọn các bài kiểm tra, sử dụng bộ lọc kiểm tra . Ví dụ,
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"
}
}
Đối với môi trường đa hương vị (trường hợp sử dụng phổ biến cho Android), hãy kiểm tra câu trả lời này , vì --tests
đối số sẽ không được hỗ trợ và bạn sẽ gặp lỗi.
--tests
để gọi một phương thức kiểm tra duy nhất trong lớp, thì chúng ta sẽ thấy phép lặp trên tất cả các lớp ngay cả tất cả những lớp không được chạy, quá chậm. Không biết rằng sự chậm chạp đó là do env của chúng tôi hay nó sẽ ảnh hưởng đến người khác. Có thể cập nhật nếu tìm thêm.
Bạn có thể làm gradle -Dtest.single=ClassUnderTestTest test
nếu bạn muốn kiểm tra lớp đơn hoặc sử dụng biểu thức chính quy như gradle -Dtest.single=ClassName*Test test
bạn có thể tìm thêm ví dụ về các lớp lọc cho các bài kiểm tra trong phần liên kết này 23.12. Kiểm tra.
--tests
tùy chọn dòng lệnh, được đặt để thay thế -DtestTaskName.single
.
--test
tùy chọn, bạn cũng có thể giới hạn kiểm tra theo một phương thức duy nhất trong lớp kiểm tra của mình. Ví dụ: gradle test --tests *MyTest.someMethod
sẽ chỉ chạy thử nghiệm duy nhất someMethod
trong MyTest
lớp của bạn . Khi tôi đang xây dựng một trường hợp thử nghiệm, tôi thường chạy một phương thức duy nhất tại một thời điểm để dễ dàng tập trung vào chỉ đầu ra mà tôi cần gỡ lỗi, sau đó chạy toàn bộ trường hợp thử nghiệm ở cuối.
gradle -D:submodule:test.single=ClassUnderTestTest :submodule:test
. Xem cuộc thảo luận này trên gradle.org
--no-rebuild
tùy chọn, ví dụ gradle -D:submodule:test.single=ClassUnderTestTest --no-rebuild :submodule:test
để ngăn chặn các phụ thuộc được xây dựng lại, và lần lượt thực hiện thử nghiệm đơn lẻ đó nhanh hơn.
Trong trường hợp bạn có một dự án đa mô-đun:
hãy để chúng tôi nói cấu trúc mô-đun của bạn là
root-module
-> a-module
-> b-module
và thử nghiệm (testToRun) mà bạn đang tìm kiếm để chạy trong mô-đun b, với đường dẫn đầy đủ: com.xyz.b.module.TestClass.testToRun
Như ở đây, bạn quan tâm đến việc chạy thử nghiệm trong mô-đun b, vì vậy bạn sẽ thấy các tác vụ có sẵn cho mô-đun b.
./gradlew :b-module:tasks
Lệnh trên sẽ liệt kê tất cả các tác vụ trong mô-đun b với mô tả. Và trong trường hợp lý tưởng, bạn sẽ có một nhiệm vụ có tên là test để chạy thử nghiệm đơn vị trong mô-đun đó.
./gradlew :b-module:test
Bây giờ, bạn đã đạt đến điểm để chạy tất cả các thử nghiệm trong mô-đun b, cuối cùng bạn có thể chuyển một tham số cho tác vụ trên để chạy thử nghiệm phù hợp với mẫu đường dẫn nhất định
./gradlew :b-module:test --tests "com.xyz.b.module.TestClass.testToRun"
Bây giờ, thay vì điều này nếu bạn chạy
./gradlew test --tests "com.xyz.b.module.TestClass.testToRun"
Nó sẽ chạy nhiệm vụ thử nghiệm cho cả mô-đun a và b, điều này có thể dẫn đến thất bại vì không có gì khớp với mẫu trên trong mô-đun.
./gradlew :b-module:test --tests testToRun
Sau khi tìm hiểu kỹ, những điều sau đây đã giúp tôi:
gradle test --tests "a.b.c.MyTestFile.mySingleTest"
Xin lưu ý rằng --tests
tùy chọn có thể không hoạt động nếu bạn có bản dựng khác types/flavors
(không thành công Unknown command-line option '--tests'
). Trong trường hợp này, cần phải chỉ định tác vụ thử nghiệm cụ thể (ví dụ testProdReleaseUnitTest
thay vì chỉ test
)
./gradlew test --tests *testMyCollectionTake*
và tôi không thể biết nên thay thế test
bằng tên kiểm tra ký tự đại diện
Dưới đây là lệnh để chạy một lớp thử nghiệm bằng cách sử dụng gradlew
tùy chọn dòng lệnh:
gradlew.bat Connected**your bundleVariant**AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass
Ví dụ dưới đây để chạy lớp com.example.TestClass
với biến thể Variant_1
:
gradlew.bat ConnectedVariant_1AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass
Trong trường hợp của tôi, các cảnh báo trình biên dịch java nhật thực của tôi được đặt quá cao và nhật thực không nhận ra lớp của tôi là hợp lệ để thực thi. Cập nhật cài đặt trình biên dịch của tôi đã khắc phục sự cố. Bạn có thể đọc thêm về nó ở đây: chú thích-không phải là không thể giải quyết