junit test suite filtering test cases
W tym samouczku omówimy, czym jest pakiet testów JUnit, jak utworzyć zestaw testów i jak filtrować przypadki testowe w JUnit 4 i JUnit 5:
Dowiedzieliśmy się, jak pominąć niektóre przypadki testowe podczas wykonywania z naszego poprzedniego samouczka. Dowiedzieliśmy się również o różnych adnotacjach używanych w JUnit 4 i JUnit 5, aby to zrobić.
W tym samouczku nauczymy się:
- Co to jest zestaw testów?
- Jak utworzyć zestaw testów, umieszczając wiele przypadków testowych w grupie i wykonując pakiet przy użyciu klasy JUnitCore?
=> Odwiedź tutaj, aby zapoznać się z ekskluzywną serią samouczków szkoleniowych JUnit.
Czego się nauczysz:
JUnit Test Suite
JUnit 4: @RunWith, @SuiteClasses Adnotations
Samouczek Wiele sposobów wykonywania testów JUnit zilustrowano, jak utworzyć zestaw testów w JUnit 4.
Adnotacje @Biegnij z i @SuiteClasses pomogło nam stworzyć zestaw testów poprzez zgrupowanie wielu klas testowych JUnit. Następnie plik uruchamiający z klasą JUnitCore.runclasses () wywołał wykonanie utworzonego zestawu testów.
Zapoznaj się ze wspomnianą sekcją, aby uzyskać wszystkie szczegółowe informacje na temat przepływu pracy wraz z rzeczywistym kodem JUnit 4.
JUnit 5: @RunWith, @SelectClasses, @SelectPackages Adnotacje
Utworzenie zestawu testów w JUnit 5 jest dość podobny do tego, co mamy w JUnit 4. Więc gdzie jest różnica?
# 1) W JUnit 4 , mamy Suite.class, który jest przekazywany jako parametr do @RunW z adnotacją w celu obsługi tworzenia zestawu testów, podczas gdy JUnit 5 używa tego samego @RunWith adnotacji, ale z parametrem wejściowym jako JUnitPlatform.class zamiast Suite.class .
Tak wygląda wiersz kodu w JUnit 5 @RunWith (JUnitPlatform.class). To jest adnotacja dołączona do platformy JUnit podprojektu.
#dwa) W JUnit 4 , Używamy @SuiteClasses aby zgrupować wiele klas JUnit oddzielonych przecinkiem, gdy są w JUnit 5 mamy:
- Adnotacja @SelectClasses to jest równoważne z @SuiteClasses w JUnit 4, aby zgrupować wiele klas JUnit.
- @SelectPackages adnotacja służy do grupowania wielu testów z pakietu (-ów). Musisz wprowadzić wartość tablicy ciągów, która reprezentuje pakiet, który chcesz dołączyć.
Innymi słowy,
- Jeśli chcesz zgrupować przypadki testowe z jednego pakietu, JUnit 5 umożliwia Ci to.
- Lub w przypadku, gdy chcesz pogrupować przypadki testowe z wielu pakietów, JUnit 5 również to zrobi. Należy tutaj pamiętać, że testy we wszystkich pod-pakietach wspomnianego pakietu są również domyślnie dołączane do zestawu testów.
JUnit 5: Różne scenariusze / przykłady
Tworzenie zestawu testów grupującego wiele klas testów
Fragment kodu pokazano poniżej:
@RunWith(JUnitPlatform.class) @SelectClasses({JUnit5TestCase1.class, JUnit5TestCase2.class }) public class JUnitTestSuite { }
Tworzenie zestawu testów dla pojedynczego pakietu
Fragment kodu pokazano poniżej:
@RunWith(JUnitPlatform.class) @SelectPackages({“ demo.tests “}) public class JUnit5TestSuite { }
Uwaga :
- Mówić demo.tests pakiet zawiera podpakiet demo.tests.subtests.
- Kod @SelectPackages ({„demo.tests“}) włączy również wszystkie testy z podpakietu do zestawu testów; domyślnie.
- Gdybyś powiedział @SelectPackages ({“demo.tests.subtests“}) , przypadki testowe w podpakiecie demo.tests.subtests będą zawarte tylko w zestawie testów, podczas gdy testy z pakietu nadrzędnego, tj. demo.tests nie zostanie uwzględniony.
Tworzenie zestawu testów dla wielu pakietów
Fragment kodu do tworzenia zestawu testów dla platformy wiele pakietów oddzielone przecinkiem w JUnit 5 - będzie wyglądać jak poniżej:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests”, “demo1.tests”, “demo2.tests”}) public class JUnit5TestSuite { }
Filtering Test Suite - JUnit 4 vs JUnit 5
Czasami musimy odfiltrować przypadki testowe i wykonać określony zestaw testów zgodnie z naszymi potrzebami. Na przykład, może istnieć zestaw testów zidentyfikowanych do testów regresji, oddzielny zestaw do testów jednostkowych i oddzielny zestaw przypadków testowych do testów dymnych.
Musimy wykluczyć lub dołączyć przypadki testowe z pewnych pakietów, klas lub kategorii. Odfiltrowanie lub tagowanie testów z jednego pakietu jest jedyną opcją w JUnit4.
W porównaniu z JUnit 4, JUnit 5 zawiera dobry zestaw funkcji wspierających tę potrzebę filtrowania przypadków testowych z pojedynczego pakietu lub wielu pakietów i pakietów podrzędnych zgodnie ze zmieniającymi się wymaganiami.
JUnit 4 - @Category, @IncludeCategory, @ExcludeCategory
Przypadki testowe w JUnit 4 można podzielić na różne kategorie. Te kategorie można wykluczyć lub uwzględnić podczas uruchamiania zestawu testów. Adnotacje @Category, @IncludeCategory i @ExcludeCategory są obsługiwane od JUnit 4.12 i nowszych.
Ogólne kroki tworzenia filtrów w oparciu o kategorię lub kategorie są następujące:
# 1) Utwórz znacznik Interfejs, który odgrywa rolę w kategorii.
#dwa) Opisz metody testowe klas, które mają zostać uwzględnione w SuiteClasses, za pomocą @Kategoria i nazwę kategorii.
# 3) W pliku zestawu testów użyj adnotacji @IncludeCategory z nazwą kategorii, aby uwzględnić testy należące do określonej kategorii.
# 4) W pliku zestawu testów użyj adnotacji @ExcludeCategory z nazwą kategorii służącą do ich wykluczania.
# 5) Adnotacji @Category można używać również na poziomie testu lub klasy. Jeśli adnotacja zostanie zastosowana na poziomie testu, to ten konkretny test zostanie oznaczony daną kategorią, podczas gdy jeśli adnotacja jest na poziomie klasy, wszystkie testy w tej klasie zostaną przypisane do danej kategorii.
Przyjrzyjmy się kilku szczegółom, aby zrozumieć praktyczną implementację kategoryzowania testów i filtrowania ich do wykonania:
Krok 1:
Zaczniemy od stworzenia pliku interfejs znacznika który będzie odgrywał rolę kategoria metod badawczych. Tutaj tworzymy kategorię o nazwie UnitTest . Kod jest bardzo prosty. Proszę zapoznać się z poniższym kodem.
Kod dla UnitTest.java
package demo.tests; public interface UnitTest {}
Krok 2:
Kategorię oznaczymy na poziom metody badawczej w klasie JUnitTestCase1.java . Aby dodać przypadek testowy junitMethod1 () do kategorii UnitTest, musimy oznaczyć metodę testową adnotacją @Category (UnitTest.class) .
Spowoduje to dodanie metody testowej do kategorii UnitTest. Inne metody badań (jeśli istnieją) nie są przypisane do kategorii, chyba że metody są oznaczone kategorią.
Aby adnotacja @Category działała w naszym kodzie, musimy zaimportować pakiet org.junit.experimental.categories.Category
Fragment kodu z JUnitTestCase1.java:
@Category(UnitTest.class) @Test public void junitMethod1(){ int Value2=9000; Assert. assertEquals (Value1, Value2); }
Alternatywnie metoda testowa może również należeć do wielu kategorii Na przykład. : @Category (UnitTest.class, SmokeTest.class)
Krok 3:
Chciałbym teraz zaznaczyć kategorię na poziomie klasy w klasie JUnitTestCase2.java . Ta sama instrukcja, która została dodana na poziomie metody testowej we wcześniejszym kroku, zostanie również dodana do pliku bieżącej klasy.
Zauważ, że tutaj dodamy stwierdzenie na poziomie klasy. W ten sposób wszystkie metody testowe w pliku będą należeć do rozszerzenia UnitTest Kategoria.
Fragment kodu z JUnitTestCase2.java:
@Category(UnitTest.class) @Test public class JUnitTestCase2 { public String stringValue='JUnit';
Krok 4:
jak używać polecenia diff do porównywania dwóch plików
Teraz, gdy nasze wymagane przypadki testowe zostały sklasyfikowane w kategorii UnitTest, zobaczymy teraz, jak dodać je do zestawu testów, filtrując je na podstawie kategorii. Wprowadzimy pewne zmiany w kodzie w JUnitTestSuite.class aby to zademonstrować.
- Categories.class zostanie przekazany jako parametr do adnotacji @RunWith.
- @ Suite.SuiteClasses przyjmie tablicę ciągów klas testowych.
- Adnotacja @ Categories.IncludeCategory będzie potrzebować UnitTest.class jako parametru.
- Ta instrukcja pomoże nam odfiltrować cały pakiet i uruchomić tylko te przypadki testowe z zestawu, które należą do kategorii.
- Categories.class potrzebuje pakietu org.junit.experimental.categories.Categories do importu.
Fragment kodu dla JunitTestSuite.java
@RunWith(Categories.class) @Categories.IncludeCategory(UnitTest.class) @Suite.SuiteClasses({JUnitTestCase1.class, JUnitTestCase2.class}) public class JUnitTestSuite {
Adnotacja @ Categories.IncludeCategory można również zapisać jako @IncludeCategory. Możesz także utworzyć wiele interfejsów (kategorii) i opisywać klasy / metody testowe wieloma kategoriami oddzielonymi przecinkami. Poniższy przykład odfiltruje testy należące do kategorii - Category1 i Category2.
Przykład: @IncludeCategory ({Category1.class, Category2.class})
Podobne zasady obowiązują @ Categories.ExcludeCategory / @ExcludeCategory aby wykluczyć metody badawcze z kategorii lub kategorii podczas przebiegu testowego.
JUnit 5 - @IncludeTags, @ExcludeTags, @IncludePackages, @ExcludePackages, @IncludeClassNamePatterns, @ExcludeClassNamePatterns
JUnit 5 jest dostarczany z wieloma podejściami do organizowania i filtrowania przypadków testowych.
JUnit 5 - @IncludeTags, @ExcludeTags
# 1) Podobnie jak JUnit 4 ma adnotacje @IncludeCategory i @ExcludeCategory w celu obsługi filtrowania przypadków testowych do wykonania.
#dwa) JUnit 5 ma adnotacje @IncludeTags i @ExcludeTags, aby osiągnąć ten sam cel.
# 3) JUnit 4 odnosi się do przypadków testowych, które mają być zorganizowane w określonej kategorii, podczas gdy JUnit 5 odnosi się do oznaczania przypadków testowych określonym tagiem, aby umożliwić filtrowanie przypadków testowych do wykonania.
Wysokopoziomowe kroki tworzenia filtrów na podstawie tagów są następujące:
- Opisz metody testowania pakietów, które mają być uwzględnione w @SelectPackages za pomocą @Etykietka i nazwę znacznika zdefiniowaną przez użytkownika. Jedna klasa może mieć różne tagi dla różnych metod testowania.
- Możesz również dodać adnotację @Tag na poziomie klasy, aby wszystkie testy w klasie były oznaczone.
- W pliku zestawu testów użyj adnotacji @IncludeTags z nazwą tagu, aby uwzględnić testy należące do określonego tagu.
- W pliku zestawu testów użyj adnotacji @ExcludeTags z nazwą tagu w celu wykluczenia ich z zestawu testów.
Omówmy teraz szczegółową ilustrację praktycznego zaimplementowania filtrowania w JUnit 5.
Krok 1 : Tagujemy metodę testową w JUnit5TestCase1.java w nazwie tagu „Regression”
Fragment kodu z JUnit5TestCase1.java:
@Tag(“Regression”) @Test public void junitMethod1(){
Krok 2 : Oznaczamy metodę testową w JUnit5TestCase2.java w nazwie tagu „SmokeTest”.
Fragment kodu z JUnit5TestCase2.java:
@Tag(“SmokeTest”) @Test public void junitMethod2(){
Krok 3: Teraz, gdy metody testowe zostały otagowane, zaktualizujemy JUnit5TestSuite.java, aby dodać do testów odpowiednie filtry według tagów. Poniższy kod obejmuje wszystkie testy oznaczone jako „Regression” i wyklucza wszystkie testy oznaczone jako „SmokeTest”.
Fragment kodu z JUnit5TestSuite.java:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeTags(“Regression”) @ExcludeTags(“SmokeTest”) public class JUnit5TestSuite { }
JUnit 5 - @IncludePackages, @ExcludePackages
Wiemy już, że przekazując nazwę pakietu w @SelectPackages adnotacja, testy w pod-pakietach pakietu również zostaną dodane do zestawu testów.
Mogą istnieć pewne pakiety podrzędne, które chcielibyśmy uwzględnić w naszym zestawie testowym, podczas gdy kilka innych pakietów podrzędnych, których nie chcemy lub mogą nie być odpowiednie, aby były zawarte w naszym zestawie.
Ułatwiają to adnotacje @IncludePackages i @ExcludePackages w JUnit 5.
Załóżmy, że mamy pakiet „demo.tests”, który ma trzy pakiety podrzędne, tj. Podpakiet1, podpakiet2 i podpakiet 3 wraz z klasami testowymi w każdym z poniższych pakietów.
Zobaczmy fragment kodu JUnit5TestSuite.java, aby zwizualizować, jak dołączyć i wykluczyć pakiet.
Scenariusz 1: Zastosuj filtr, aby uwzględnić przypadki testowe tylko z podpakietu1.
Poniższy kod zawiera wszystkie testy ze wszystkich klas JUnit w pakiecie demo.tests.subpackage1, jednak wyklucza wszystkie testy bezpośrednio w pakiecie demo.test oraz te z pakietu subpackage2 i subpackage3.
Fragment kodu z JUnit5TestSuite.java:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludePackages(“demo.tests.subpackage1”) public class JUnit5TestSuite { }
Scenariusz nr 2: Zastosuj filtr, aby wykluczyć przypadki testowe tylko z podpakietu pakietu 3.
Poniższy kod wyklucza wszystkie testy z klas JUnit w pakiecie - demo.tests.subpackage3, jednak pakiet zawiera wszystkie testy bezpośrednio w pakiecie demo.test oraz w pakiecie subpackage1 i subpackage2.
Fragment kodu z JUnit5TestSuite.java:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @ExcludePackages(“demo.tests.subpackage3”) public class JUnit5TestSuite { }
JUnit 5 - @IncludeClassNamePatterns, @ExcludeClassNamePatterns
Jeśli chcesz dołączyć lub wykluczyć określone klasy pasujące do określonego wyrażenia regularnego z pakietu, adnotacje @ IncludeClassNamePatterns i @ ExcludeClassnamePatterns może być używany w pliku klas zestawu testów.
Zobaczmy teraz ilustrację przedstawiającą aktualizację kodu w JUnit5TestSuite.java
Scenariusz 1:
Poniższy kod zawiera klasy kończące się na „Ctests” z pakietu demo.tests
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeClassNamePatterns({'^.*CTests?$'})
Scenariusz nr 2:
Wykluczemy teraz te klasy, które zainicjować z „STest” z pakietu demo.tests
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @ExcludeClassNamePatterns({'^STest.*$'})
Scenariusz 3:
Jako kryteria filtru można również przekazać wiele wyrażeń regularnych. Poniższy kod podaje dwa różne wyrażenia regularne oddzielone znakiem „ LUB ”Operator. Listwa szczelinowa | jest tutaj operatorem OR.
youtube na mp4 szybko za darmo online
Kod odfiltrowuje klasy inicjowanie z Test ( Test.*) lub kończący się z Testy (*. Testy?) i włącza te klasy do zestawu testów, ponieważ jest używana adnotacja @IncludeClassNamePatterns.
Uwaga: Jeśli w pełni kwalifikowana nazwa klasy pasuje do co najmniej jednego wzorca, klasa zostanie pobrana zgodnie z adnotacją @IncludeClassNamePatterns lub @ExcludeClassNamePatterns.
@RunWith (JUnitPlatform.class)
@SelectPackages ({„demo.tests“})
@IncludeClassNamePatterns (. * Tests?) $ ”)
Często zadawane pytania dotyczące przypadków testowych filtrowania JUnit
Oto pytanie, które mogło nękać cię już od dłuższego czasu.
Pytanie 1) Jaka jest różnica między wyłączaniem / ignorowaniem testu a odfiltrowywaniem testu? Czy żadna z funkcji nie może służyć temu samemu celowi, jakim jest pomijanie przypadków testowych podczas wykonywania?
Odpowiedź: To pytanie jest rzeczywiście prawdziwe i warto na nie odpowiedzieć.
- Dzięki funkcji testowania odfiltrowywania możesz również wykluczyć pliki zawierać testy w zależności od oznaczonej kategorii. Podczas gdy wyłączając, możesz zdecydować się tylko na wykluczenie i nie włączanie testów do wykonania.
- Odfiltrowanie przypadków testowych jest rodzajem warunkowego pomijania przypadków testowych, podczas gdy w przypadku testów ignorowanych są one pomijane bez warunków.
- Inną istotną różnicą między nimi jest to, że po uruchomieniu przypadków testowych z testami z adnotacją @Ignore lub @Disabled - zignorowane testy są wyświetlane w wynikach testów pod SKIPPED liczyć
- Po uruchomieniu odfiltrowanych testów w ogóle nie pojawiają się one w wynikach testu.
Wniosek
W tym samouczku dowiedzieliśmy się, jak filtrować testy, dodając kategorię / tag do testów.
W JUnit 4 dowiedzieliśmy się, że mamy @Category, @IncludeCategory i @ExcludeCategory do filtrowania przypadków testowych, podczas gdy JUnit 5 ma @IncludeTags i @ExcludeTags, aby zrobić to samo.
Poza tym JUnit 5 ma dodatkowe opcje filtrowania za pomocą adnotacji @IncludePackages, @ExcludePackages, a także adnotacji do włączania lub wykluczania klas przy użyciu wzorców nazw klas. Im więcej odkrywamy; zdajemy sobie sprawę, że do zbadania jest jeszcze znacznie więcej.
=> Obejrzyj serię szkoleń Simple JUnit tutaj.
rekomendowane lektury
- JUnit Ignore Test Case: JUnit 4 @Ignore Vs JUnit 5 @Disabled
- Testy JUnit: Jak pisać przypadki testowe JUnit z przykładami
- Lista adnotacji JUnit: JUnit 4 Vs JUnit 5
- Samouczek JUnit dla początkujących - co to jest testowanie JUnit
- Co to jest urządzenie testowe JUnit: samouczek z przykładami JUnit 4
- Wiele sposobów wykonywania testów JUnit
- Pobierz, zainstaluj i skonfiguruj JUnit w Eclipse
- Wprowadzenie do JUnit Framework i jego wykorzystanie w skrypcie Selenium - Samouczek Selenium # 11