Stwórz JUnit Zestaw testowy z przykładem: @RunWith @SuiteClasses
⚡ Inteligentne podsumowanie
JUnit Zestawy testów agregują przypadki testowe z kilku klas, tak aby były uruchamiane razem w jednym przebiegu, sterowane adnotacjami @RunWith(Suite.class) i @SuiteClasses i uruchamiane za pośrednictwem zwykłej klasy uruchamiającej testy.

In JUnitzestaw testów pozwala nam na agregację wszystkich przypadki testowe z wielu klas w jednym miejscu i prowadzić je razem.
Aby uruchomić test pakietu, należy dodać adnotacje do klasy, korzystając z poniższych adnotacji:
- @RunWith(Suite.class)
- @SuiteClasses(test1.class, test2.class…) lub @Suite.SuiteClasses({test1.class, test2.class…})
Dzięki powyższym adnotacjom wszystkie klasy testowe w pakiecie zaczną być wykonywane po kolei. Sama klasa pakietu pozostaje pusta: jest jedynie miejscem przechowywania adnotacji, a program uruchamiający odczytuje te adnotacje, aby zdecydować, co wykonać.
Kroki tworzenia zestawu testów i modułu uruchamiającego testy
Cztery poniższe kroki tworzą najmniejszy zestaw, który faktycznie działa: dwie zwykłe klasy testowe, klasa zestawu nadająca im nazwy oraz moduł uruchamiający, który uruchamia zestaw z metody głównej.
Krok 1) Utwórz prostą klasę testową (np. MyFirstClassTest) i dodaj metodę z adnotacją @Test.
Pierwsza klasa zawiera pojedynczą pustą metodę testową, co wystarcza, aby udowodnić, że pakiet ją wykryje:
Krok 2) Utwórz inną klasę testową do dodania (np. MySecondClassTest) i utwórz metodę z adnotacją @Test.
Druga klasa ma dokładnie taki sam kształt, więc zestaw składa się z dwóch oddzielnych klas do agregacji:
Krok 3) Aby utworzyć zestaw testów, należy najpierw dodać do klasy adnotacje @RunWith(Suite.class) i @SuiteClasses(class1.class, class2.class…).
Należy zauważyć, że klasa zestawu TestSuiteExample nie deklaruje żadnej własnej metody testowej — wszystkie informacje znajdują się w dwóch adnotacjach:
Krok 4) Utwórz klasę Test Runner, aby uruchomić nasz zestaw testów, jak pokazano poniżej:
Biegacz jest prosty Java klasa z metodą główną, która przekazuje klasę pakietu do JUnitCore:
Code Wyjaśnienie:
- Code Linia 8: Deklarowanie głównej metody klasy Test, która będzie uruchamiać nasze JUnit test.
- Code Linia 9: Wykonywanie przypadków testowych przy użyciu JUnitCore.runClasses przyjmuje nazwę klasy testowej jako parametr (w powyższym przykładzie używasz TestSuiteExample.class pokazanego w kroku 3).
- Code Linia 11: Przetwarzanie wyniku za pomocą pętli for i drukowanie błędnego wyniku.
- Code Linia 13: Drukowanie pomyślnego wyniku.
Wyjście: Oto wynik pokazujący pomyślny test bez błędów trace jak podano poniżej:
Zielony pasek potwierdza, do czego służy pakiet: jedno uruchomienie, jeden widok wyników i obie klasy raportowane pod węzłem pakietu, a nie w dwóch oddzielnych uruchomieniach.
JUnit Przykład zestawu testowego
Rozważmy bardziej złożony przykład, w którym klasy wewnątrz pakietu faktycznie zapewniać coś zamiast trzymać pustą metodę.
JunitTest.java
JunitTest.java to prosta klasa z adnotacją @Biegnij z oraz @Zestaw Adnotacje. Możesz podać dowolną liczbę klas w zestawie jako parametry, jak podano poniżej:
package guru99.junit; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ SuiteTest1.class, SuiteTest2.class, }) public class JunitTest { // This class remains empty, it is used only as a holder for the above annotations }
SuiteTest1.java
SuiteTest1.java to klasa testowa zawierająca metody testowe, które drukują komunikat, jak pokazano poniżej. Będziesz używać tej klasy jako elementu zestawu w klasie wymienionej powyżej. Opiera się ona na klasie pomocniczej o nazwie JUnitWiadomość zdefiniowana w innym miejscu tego samego pakietu i nieobecna w tym miejscu.
package guru99.junit; import static org.junit.Assert.assertEquals; import org.junit.Test; public class SuiteTest1 { public String message = "Saurabh"; JUnitMessage junitMessage = new JUnitMessage(message); @Test(expected = ArithmeticException.class) public void testJUnitMessage() { System.out.println("Junit Message is printing "); junitMessage.printMessage(); } @Test public void testJUnitHiMessage() { message = "Hi!" + message; System.out.println("Junit Hi Message is printing "); assertEquals(message, junitMessage.printHiMessage()); System.out.println("Suite Test 2 is successful " + message); } }
SuiteTest2.java
SuiteTest2.java jest inną klasą testową, podobną do SuiteTest1.java, posiadając metodę testową do drukowania wiadomości, jak podano poniżej. Będziesz używać tej klasy jako członka zestawu w JunitTest.java.
package guru99.junit; import org.junit.Assert; import org.junit.Test; public class SuiteTest2 { @Test public void createAndSetName() { String expected = "Y"; String actual = "Y"; Assert.assertEquals(expected, actual); System.out.println("Suite Test 1 is successful " + actual); } }
Wydajność
Po wykonaniu Test Junit.java, która zawiera pakiet zawierający SuiteTest1.java oraz SuiteTest2.java, otrzymasz poniższy wynik. Konsola wyświetla komunikaty wygenerowane przez obie klasy:
JUnit wyświetl rekordy tego samego przebiegu jako trzy zaliczone metody testowe zgrupowane w klasie pakietu:
Uwaga: Etykiety konsoli w tym przykładzie są skrzyżowane — ciąg wydrukowany przez SuiteTest1 to „Test Suite 2”, a ten wydrukowany przez SuiteTest2 to „Test Suite 1”. Oryginalne listy są odtwarzane bez zmian, więc etykiety pozostają takie, jakie nadał im autor; odczytaj nazwę klasy w JUnit zamiast drukowanej etykiety, gdy dopasowujesz dane wyjściowe do źródła.
Jak utworzyć zestaw testów w JUnit 5
JUnit Wersja 5 całkowicie usuwa runnery, więc @RunWith(Suite.class) nie istnieje w pakietach org.junit.jupiter. Pakiety zostały przeniesione do JUnit Platforma, która wysyła je w osobnym artefakcie o nazwie Silnik pakietu junit-platform-suiteDodaj tę zależność, a następnie dodaj adnotację @Suite do klasy i jedną z adnotacji selektora.
import org.junit.platform.suite.api.SelectClasses; import org.junit.platform.suite.api.Suite; import org.junit.platform.suite.api.SuiteDisplayName; @Suite @SuiteDisplayName("Guru99 suite") @SelectClasses({ SuiteTest1.class, SuiteTest2.class }) public class JunitTest { // Empty holder, exactly as in JUnit 4 }
Adnotacje selektora zastępują pojedynczą listę @SuiteClasses małą rodziną opcji:
| Adnotacja | Co wybiera |
| @SelectClasses | Poszczególne klasy testowe nazywane są jedna po drugiej, stanowią bezpośredni zamiennik @SuiteClasses. |
| @SelectPackages | Każda klasa testowa w pakiecie o podanej nazwie i we wszystkich jego podpakietach. |
| @IncludeClassNamePatterns | Filtr wyrażenia regularnego zastosowany do zaznaczenia. |
| @SuiteDisplayName | Czytelna nazwa wyświetlana w raporcie zamiast nazwy klasy. |
W praktyce istotne są jeszcze dwie różnice. JUnit Klasa pakietu 5 może deklarować metody @BeforeSuite i @AfterSuite, które są uruchamiane jednokrotnie w całym pakiecie, a JUnit Przykład 4 powyżej nadal działa na JUnit Platforma korzysta z klasycznego silnika, więc nie ma potrzeby przepisywania oryginalnego kodu na tej stronie, aby nadal działał.
Zalety i ograniczenia JUnit Zestawy testowe
Apartament to grupaping mechanizm, a nie ramy testowe samo w sobie, co wpływa zarówno na to, co robi dobrze, jak i na to, kiedy przestaje być przydatne.
Zalety
- Jedno uruchomienie uruchamia powiązane klasy, więc zestaw dymny lub regresja zestaw uruchamia się za pomocą jednego polecenia.
- Widok wyników grupuje wszystkie klasy w ramach jednego węzła pakietu, co ułatwia wykrycie wspólnej awarii.
- Lista członków jest zapisana w kodzie, dlatego podlega przeglądowi i kontroli wersji tak jak każdy inny plik źródłowy.
- Tę samą klasę pakietu można uruchomić z poziomu IDE, z poziomu programu uruchamiającego, takiego jak JUnitRdzeń lub narzędzie do kompilacji.
Ograniczenia
- @SuiteClasses to zakodowana na stałe lista, więc nowa klasa testowa jest automatycznie pomijana, dopóki ktoś nie edytuje zestawu.
- Zestaw nie daje żadnej gwarancji kolejności wykraczającej poza kolejność, w jakiej klasy są wymienione.
- Żadne elementy nie są współdzielone pomiędzy klasami członkowskimi, więc zestaw nie zastępuje klasy bazowej ani klasy osprzętu.
- Narzędzia do kompilacji już wykrywają klasy testowe na podstawie konwencji nazewnictwa, co sprawia, że zestaw narzędzi jest zbędny w wielu projektach.
Typowe błędy podczas tworzenia JUnit Pakiet testowy
Większość problemów z pakietem generuje krótką, nieprzydatną wiadomość. Tabela przedstawia przykładowe komunikaty, z którymi możesz się spotkać, wraz z ich przyczyną i rozwiązaniem.
| Wiadomość lub objaw | Spowodować | Fix |
| initializationError: Brak metod możliwych do uruchomienia | Klasa jest uruchamiana jako zwykła klasa testowa, ale zawiera tylko adnotacje. | Dodaj @RunWith(Suite.class), aby zamiast domyślnego programu uruchamiającego funkcję, funkcję tę przejął program uruchamiający pakiet. |
| nie można znaleźć symbolu: klasa Suite | Brak importu pakietu. | Importuj org.junit.runners.Suite obok org.junit.runner.RunWith. |
| Apartament działa, ale jedna klasa jest pomijana | Klasa nigdy nie została dodana do listy @SuiteClasses. | Dodaj klasę jawnie lub przenieś ją do @SelectPackages w JUnit 5. |
| Kompilator nie akceptuje nazwy klasy | @Runwith lub @suiteClasses zostało napisane z niewłaściwą wielkością liter. | Java adnotacje uwzględniają wielkość liter: @RunWith i @SuiteClasses pisz dokładnie. |
| Testy w samej klasie pakietu nigdy nie są uruchamiane | Do uchwytu pakietu dodano metodę @Test. | Pozostaw uchwyt pusty i przenieś metodę testową do klasy członkowskiej. |
Napisanie zestawu raz i trzymanie się goping To jest prawdziwa praca. Jeśli lista odbiega od klas na dysku, pakiet wyświetla kolor zielony, podczas gdy część test jednostkowy zestaw nigdy się nie wykonuje, jest to jeden z najcichszych trybów awarii w Testowanie oprogramowania.







