Biorąc pod uwagę odpowiedzi, powinno być jasne, że chodzi o testy lokalne , a nie testy instrumentalne . Android / Gradle wprowadza zamieszanie, nazywając te testy lokalne testami „jednostkowymi”.
tir38
Odpowiedzi:
560
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ż --testsargument nie będzie obsługiwany, a otrzymasz błąd.
podejście do filtrowania można również prawdopodobnie połączyć z regułami zadań w celu wygodnego wyboru testu
Matt Whipple
W przypadku dużych pakietów testowych, nawet jeśli --testswywoł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.
arntg
185
Możesz to zrobić, gradle -Dtest.single=ClassUnderTestTest testjeśli chcesz przetestować pojedynczą klasę lub użyć wyrażenia regularnego, tak jak gradle -Dtest.single=ClassName*Test testmożesz znaleźć więcej przykładów klas filtrujących do testów pod tym linkiem w sekcji 23.12. Test.
Najnowsze wersje (od wersji 1.10) obsługują --testsopcję wiersza poleceń, która jest ustawiona na zastąpienie -DtestTaskName.single.
Peter Niederwieser
58
Dzięki tej --testopcji 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 someMethodw twojej MyTestklasie. 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.
Jeff French
10
Warto również zauważyć, że jeśli chcesz uruchomić pojedynczy test w projekcie wielomodułowym, to polecenie to gradle -D:submodule:test.single=ClassUnderTestTest :submodule:test. Zobacz tę dyskusję na gradle.org
Bulat,
2
Możesz także skorzystać z --no-rebuildopcji, np. gradle -D:submodule:test.single=ClassUnderTestTest --no-rebuild :submodule:testAby zapobiec odbudowywaniu zależności, a tym samym szybciej wykonać ten test.
falconepl
2
Ta opcja jest przestarzała w Grade 5
Eyal
108
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
to polecenie nie działa dla mnie. > Błąd: Nieznana opcja wiersza polecenia „--tests”
Tarkik
31
Pamiętaj, że --testsopcja 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. testProdReleaseUnitTestZamiast po prostu test)
Czy potrafisz podać pełny przykład? Próbuję uruchomić 3 testy, które pasują do znaku wieloznacznego ./gradlew test --tests *testMyCollectionTake*i nie wiem, jak mam zastąpić testgo testowym
znakiem
4
Poniżej znajduje się polecenie uruchomienia jednej klasy testowej przy użyciu gradlewopcji wiersza polecenia:
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ć
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.
Od wersji 1.10 klasy obsługuje wybieranie testów przy użyciu filtra testowego . Na przykład,
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.źródło
--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 jakgradle -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.źródło
--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 testsomeMethod
w twojejMyTest
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
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.
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.
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
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.
źródło
./gradlew :b-module:test --tests testToRun
Po wielu rozmyślaniach, dla mnie zadziałało:
gradle test --tests "a.b.c.MyTestFile.mySingleTest"
źródło
Pamiętaj, że
--tests
opcja może nie działać, jeśli masz inną kompilacjętypes/flavors
(nie działaUnknown command-line option '--tests'
). W takim przypadku konieczne jest określenie konkretnego zadania testowego (np.testProdReleaseUnitTest
Zamiast po prostutest
)źródło
./gradlew test --tests *testMyCollectionTake*
i nie wiem, jak mam zastąpićtest
go testowymPoniżej znajduje się polecenie uruchomienia jednej klasy testowej przy użyciu
gradlew
opcji wiersza polecenia:Poniżej przykład uruchomienia klasy
com.example.TestClass
z wariantemVariant_1
:źródło
Powinieneś spróbować dodać gwiazdkę (*) na końcu.
źródło
Uruchom pojedynczy test o nazwie MyTest:
źródło
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ć
źródło