Jestem nowy w Gradle. Używam Gradle 1.10 i Ubuntu 13.
Chcę wiedzieć, czy jest jakaś komenda do wykonania tylko jednej lokalnej klasy testowej, podobnej do „testonly” w SBT.
Jestem nowy w Gradle. Używam Gradle 1.10 i Ubuntu 13.
Chcę wiedzieć, czy jest jakaś komenda do wykonania tylko jednej lokalnej klasy testowej, podobnej do „testonly” w SBT.
Odpowiedzi:
Aby uruchomić jedną klasę testową, odpowiedź Airborn jest dobra.
Korzystając z niektórych opcji wiersza poleceń, które tutaj znajdziesz, możesz po prostu zrobić coś takiego.
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
Od wersji 1.10 klasy obsługuje wybieranie testów przy użyciu filtra testowego . Na przykład,
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"
}
}
W przypadku środowisk o wielu smakach (częsty przypadek użycia dla Androida) sprawdź tę odpowiedź , ponieważ --tests
argument nie będzie obsługiwany, a otrzymasz błąd.
--tests
wywołuje się jedną metodę testową w klasie, widzimy iterację we wszystkich klasach, nawet tych, które nie są uruchamiane, co jest zbyt wolne. Nie wiem, czy ta powolność wynika z naszej env, czy może wpłynie na innych. Można zaktualizować, jeśli znajdziesz więcej.
Możesz to zrobić, gradle -Dtest.single=ClassUnderTestTest test
jeśli chcesz przetestować pojedynczą klasę lub użyć wyrażenia regularnego, tak jak gradle -Dtest.single=ClassName*Test test
możesz znaleźć więcej przykładów klas filtrujących do testów pod tym linkiem w sekcji 23.12. Test.
--tests
opcję wiersza poleceń, która jest ustawiona na zastąpienie -DtestTaskName.single
.
--test
opcji możesz również ograniczyć testowanie do jednej metody w swojej klasie testowej. Na przykład: gradle test --tests *MyTest.someMethod
przeprowadzi tylko jeden test someMethod
w twojej MyTest
klasie. Kiedy buduję przypadek testowy, zwykle uruchamiam pojedynczą metodę na raz, aby ułatwić skupienie się tylko na danych wyjściowych potrzebnych do debugowania, a następnie uruchomić całą walizkę testową na końcu.
gradle -D:submodule:test.single=ClassUnderTestTest :submodule:test
. Zobacz tę dyskusję na gradle.org
--no-rebuild
opcji, np. gradle -D:submodule:test.single=ClassUnderTestTest --no-rebuild :submodule:test
Aby zapobiec odbudowywaniu zależności, a tym samym szybciej wykonać ten test.
W przypadku projektu wielomodułowego:
powiedzmy, że twoja struktura modułu jest
root-module
-> a-module
-> b-module
a test (testToRun), który chcesz uruchomić, jest w module b, z pełną ścieżką: com.xyz.b.module.TestClass.testToRun
Ponieważ tutaj jesteś zainteresowany uruchomieniem testu w b-module, więc powinieneś zobaczyć zadania dostępne dla b-modułu.
./gradlew :b-module:tasks
Powyższe polecenie wyświetli listę wszystkich zadań w b-module z opisem. W idealnym przypadku będziesz mieć zadanie o nazwie test, aby uruchomić testy jednostkowe w tym module.
./gradlew :b-module:test
Teraz osiągnąłeś punkt uruchomienia wszystkich testów w module b, w końcu możesz przekazać parametr do powyższego zadania, aby uruchomić testy, które pasują do określonego wzorca ścieżki
./gradlew :b-module:test --tests "com.xyz.b.module.TestClass.testToRun"
Teraz zamiast tego, jeśli uruchomisz
./gradlew test --tests "com.xyz.b.module.TestClass.testToRun"
Uruchomi to zadanie testowe zarówno dla modułu a i b, co może doprowadzić do niepowodzenia, ponieważ nic nie pasuje do powyższego wzorca w module a.
./gradlew :b-module:test --tests testToRun
Po wielu rozmyślaniach, dla mnie zadziałało:
gradle test --tests "a.b.c.MyTestFile.mySingleTest"
Pamiętaj, że --tests
opcja może nie działać, jeśli masz inną kompilację types/flavors
(nie działa Unknown command-line option '--tests'
). W takim przypadku konieczne jest określenie konkretnego zadania testowego (np. testProdReleaseUnitTest
Zamiast po prostu test
)
./gradlew test --tests *testMyCollectionTake*
i nie wiem, jak mam zastąpić test
go testowym
Poniżej znajduje się polecenie uruchomienia jednej klasy testowej przy użyciu gradlew
opcji wiersza polecenia:
gradlew.bat Connected**your bundleVariant**AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass
Poniżej przykład uruchomienia klasy com.example.TestClass
z wariantem Variant_1
:
gradlew.bat ConnectedVariant_1AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass
W moim przypadku ostrzeżenia mojego kompilatora Java Eclipse zostały ustawione zbyt wysoko, a środowisko Eclipse nie rozpoznało mojej klasy jako ważnej do wykonania. Aktualizacja ustawień mojego kompilatora naprawiła problem. Możesz przeczytać więcej na ten temat tutaj: adnotacja-nonnull-nie można rozwiązać