JUnit vs TestNG

W pracy nadal Używamy JUnit 3 do przeprowadzania testów. Rozważaliśmy przejście na JUnit 4 dla nowych testów , które będą pisane, ale od jakiegoś czasu mam na oku TestNG. Jakie macie doświadczenia z JUnit 4 lub TestNG, a które wydaje się działać lepiej dla bardzo dużej liczby testów? Elastyczność w pisaniu testów jest również dla nas ważna, ponieważ nasze testy funkcjonalne obejmują szeroki aspekt i muszą być pisane na różne sposoby aby uzyskać wyniki.

Stare testy nie będą ponownie pisane, ponieważ wykonują swoją pracę dobrze. To, co chciałbym zobaczyć w nowych testach, to elastyczność w sposobie pisania testu, naturalne twierdzenia, grupowanie i łatwe rozproszone wykonywanie testów.

Author: blacktide, 2008-08-09

13 answers

Użyłem obu, ale muszę się zgodzić z Justinem standardem, że nie powinieneś tak naprawdę rozważać przepisywania istniejących testów do żadnego nowego formatu. Niezależnie od decyzji, to dość trywialne, aby uruchomić zarówno. TestNG stara się być znacznie bardziej konfigurowalny niż JUnit, ale w końcu oba działają równie dobrze.

TestNG ma ciekawą funkcję, w której można oznaczyć testy jako określoną grupę, a następnie łatwo uruchomić wszystkie testy określonej grupy lub wykluczyć testy określonej grupy. Tak więc ty może oznaczać testy, które działają powoli jak w grupie" slow", a następnie ignorować je, gdy chcesz szybkich wyników. Sugestią z ich dokumentacji jest oznaczanie niektórych podzbiorów jako" checkin " testów, które powinny być uruchamiane za każdym razem, gdy sprawdzasz nowe pliki. Nigdy nie widziałem takiej funkcji w JUnit, ale z drugiej strony, jeśli jej nie masz, naprawdę jej nie brakuje.

Ze względu na wszystkie roszczenia o wysokiej konfiguracji, kilka tygodni temu natrafiłem na narożną sprawę, w której nie mogłem zrobić tego,co chciałem... I wish I pamiętam, co to jest, ale chciałem o tym wspomnieć, żebyś wiedział, że nie jest idealny.

Największą zaletą TestNG są adnotacje... który JUnit dodał w wersji 4.

 58
Author: Mike Stone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-09 07:00:34

Po Pierwsze chciałbym powiedzieć, nie przepisywać wszystkie testy tylko do najnowszej mody. Junit3 działa doskonale, a wprowadzenie adnotacji w 4 nie kupuje ci zbyt wiele (moim zdaniem). O wiele ważniejsze jest to, że piszecie testy, a wygląda na to, że to robicie.

Użyj tego, co wydaje się najbardziej naturalne i pomaga wykonać swoją pracę.

Nie mogę skomentować TestNG b/c nie używałem go. Ale polecam unitils , świetne opakowanie dla JUnit / TestNG/DBUnit / EasyMock, niezależnie od tego, którą trasę wybierzesz. (Obsługuje wszystkie smaki wymienione powyżej)

 20
Author: Justin Standard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-10 22:46:22

Rok temu mieliśmy ten sam problem. Spędziłem jakiś czas zastanawiając się, który ruch był lepszy, i w końcu zdaliśmy sobie sprawę, że TestNG nie ma "zabójczych funkcji". Jest ładny i ma pewne funkcje, których JUnit 4 nie ma, ale ich nie potrzebujemy.
Nie chcieliśmy, aby ludzie czuli się nieswojo pisząc testy podczas poznawania TestNG, ponieważ chcieliśmy, aby nadal pisali dużo testów.
Ponadto JUnit jest de facto standardem w świecie Javy. Nie ma porządnego narzędzia, które nie obsługuje go z pudełka, można znaleźć wiele pomocy w Internecie i dodali wiele nowych funkcji w ciągu ostatniego roku, który pokazuje, że żyje.

Zdecydowaliśmy się trzymać JUnit i nigdy nie oglądaliśmy się za siebie.

 19
Author: abyx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-28 07:30:46

Największe karty losowania TestNG dla mnie obejmują jego wsparcie grup testowych, a co ważniejsze - zależności grup testowych(oznaczanie testu jako zależnego od grupy powoduje, że testy po prostu pomijają uruchamianie, gdy grupa zależna zawiedzie).

Inne duże karty TestNG dla mnie obejmują parametry testowe, dostawców danych, transformatory adnotacji i przede wszystkim-tętniącą życiem i responsywną społeczność użytkowników.

Podczas gdy na powierzchni można nie myśleć o wszystkich TestNGs powyższe funkcje mogą nie być potrzebne, gdy zaczniesz rozumieć elastyczność, jaką zapewniają testy, będziesz się zastanawiać, jak poradziłeś sobie z JUnit.

(disclaimer - nie używałem JUnit 4.x w ogóle, więc nie jestem w stanie naprawdę komentować postępów lub nowych funkcji).

 16
Author: Mark Derricutt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-18 10:09:42

Pozdrawiam wszystkich. Kilka innych rzeczy, które osobiście znalazłem bardziej lubię w TestNG są:

  1. @BeforeClass dla TestNG ma miejsce po utworzeniu klasy, więc nie jesteś ograniczony tylko możliwością wywołania statycznych metod swojej klasy w niej.

  2. Równoległe i sparametryzowane testy, może po prostu nie mam dość życia... ale po prostu dostaję kopa pisząc jeden zestaw testów Selenium, akceptując nazwę Sterownika jako parametr. Następnie zdefiniowanie 3 równoległych grup testowych, Po 1 dla kierowców IE, FF i Chrome i Oglądanie wyścigu! Pierwotnie zrobiłem 4, ale zbyt wiele stron, nad którymi pracowałem, łamie Sterownik HtmlUnit z tego czy innego powodu.

Tak, pewnie trzeba znaleźć to życie. ;)
 14
Author: mezmo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-27 12:07:33

Chciałem podzielić się tą, którą dziś spotkałem. Zauważyłem, że Wbudowany Parametryzowany runner jest dość prymitywny w Junit4 w porównaniu do TestNG(wiem, że każdy framework ma swoje mocne strony, ale nadal). Adnotacja @parameters Junit4 jest ograniczona do jednego zestawu parametrów. Napotkałem ten problem podczas testowania poprawnego i nieprawidłowego zachowania funkcjonalności w tej samej klasie testowej. Tak więc zostanie użyta pierwsza publiczna, statyczna metoda z adnotacjami, którą znajdzie, ale może je znaleźć w dowolnej kolejności. To powoduje, że niepotrzebnie pisać różne klasy. Jednak TestNG zapewnia czysty sposób, aby zapewnić różnego rodzaju dostawców danych dla każdej metody. Możemy więc przetestować tę samą jednostkę kodu z poprawnym i nieprawidłowym sposobem w tej samej klasie testowej, umieszczając poprawne / nieprawidłowe dane oddzielnie. Pójdę z TestNG.

 10
Author: ravinikam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-08 12:59:04

Jeszcze jedną zaletą TestNG jest wspieranie równoległych testów. Myślę, że w naszej erze multikorów jest to ważne.

Użyłem również obu frameworków. Ale używam hamcrest dla twierdzeń. Hamcrest pozwala łatwo napisać własną metodę assert. Więc zamiast

assertEquals(operation.getStatus(), Operation.Status.Active);

Możesz napisać

assertThat(operation, isActive());

To daje możliwość wykorzystania wyższego poziomu abstrakcji w testach. A to sprawia, że twoje testy są bardziej wytrzymałe.

 7
Author: Denis Bazhenov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-10 12:10:43

Kilka dodatków do odpowiedzi Mike 'a Stone' A:

1) najczęściej używam grup TestNG, gdy chcę uruchomić jedną metodę testową w zestawie testowym. Po prostu dodaję ten test do grupy "phil", a następnie uruchamiam tę grupę. Kiedy używałem JUnit 3, komentowałem wpisy dla wszystkich metod, ale ta, którą chciałem uruchomić w metodzie "suite", ale wtedy często zapominałem o ich odkomentowaniu przed checkin. Z grupami nie mam już tego problemu.

2) W zależności od złożoności testów, migracja testów z JUnit3 do TestNG może być wykonana nieco automatycznie za pomocą sed i utworzenie klasy bazowej, która zastąpi TestCase, która statycznie importuje wszystkie metody TestNG assert.

Mam informacje na temat mojej migracji z JUnit do TestNG tutaj i tutaj .

 5
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-05 19:44:40

JUnit 4 Vs TestNG-porównanie według mkyong.com (aktualizacja: 2013).

Wniosek: proponuję użyć TestNG jako podstawowego frameworka testów jednostkowych dla projektu Java, ponieważ TestNG to więcej zaawansowanie w testowaniu parametryzacji, testowaniu zależności i testowaniu pakietów (koncepcja grupowania).

TestNG jest przeznaczony do testów funkcjonalnych, na wysokim poziomie i złożonych testów integracyjnych. Jego elastyczność jest szczególnie przydatna w przypadku dużych zestawów testowych.

DODATKOWO, Testowaniezobacz też obejmuje całą podstawową funkcjonalność JUnit4. Po prostu nie mam powodu, by używać JUnit.

In simple terms, TestNG = JUnit + lot more...So, Why debate ? go and grab TestNG :-)

Możesz znaleźć bardziej szczegółowe porównanie tutaj .

 5
Author: Sundararaj Govindasamy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-29 22:38:50

Lubię zgrabną i łatwą integrację TestNG z Guice.

 3
Author: Basil Musa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-06 13:09:03

Twoje pytanie wydaje mi się dwojakie. Z jednej strony chciałbyś porównać dwa frameworki testowe, z drugiej strony chciałbyś łatwo zaimplementować testy, mieć naturalne twierdzenia itp...

Ok, po pierwsze JUnit gra w catchup z TestNG pod względem funkcjonalności, wypełnili lukę trochę co z v4, ale moim zdaniem nie dość dobrze. Rzeczy takie jak adnotacje i dataprovidery są nadal znacznie lepsze w TestNG. Są również bardziej elastyczne pod względem wykonywania testów, ponieważ TestNG ma zależności testowe, grupowanie i porządkowanie.

JUnit nadal wymaga, aby pewne metody before/after były statyczne, co ogranicza to, co można zrobić przed uruchomieniem testów, TestNG nigdy nie ma tego problemu.

TBH, głównie różnice między dwoma frameworkami nie znaczą wiele, chyba że skupiasz się na testowaniu integracji/automatyzacji. JUnit z mojego doświadczenia jest zbudowany od podstaw do testów jednostkowych i jest teraz pchany w kierunku wyższych poziomów testów, które IMO sprawia, że jest to złe narzędzie do pracy. TestNG dobrze sprawdza się w testach jednostkowych, a dzięki solidnemu dostarczaniu danych i doskonałym możliwościom wykonywania testów, działa jeszcze lepiej na poziomie testów integracji / automatyzacji.

Teraz dla tego, co uważam, jest osobna kwestia, jak pisać dobrze ustrukturyzowane, czytelne i konserwowalne testy. Większość z tego jestem pewien, że wiesz, ale rzeczy takie jak wzór fabryczny, wzorzec poleceń i PageObjects (jeśli Twoje testujące strony internetowe) są niezbędne, jest bardzo ważne, aby mieć warstwę abstrakcji między tym, co testujesz (SUT) a tym, czym jest rzeczywisty test (twierdzenia logiki biznesowej). Aby mieć o wiele ładniejsze twierdzenia, możesz użyć Hamcrest. Wykorzystaj dziedziczenie/interfejsy javas, aby zmniejszyć powtarzalność i wymusić powszechność.

Prawie zapomniałem, użyj również wzorca Test Data Builder Pattern , to w połączeniu z adnotacją dataprovider TestNG jest bardzo przydatne.

 3
Author: MostWanted,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-12 14:17:56

Moja opinia o tym, co sprawia, że TestNG naprawdę jest o wiele potężniejszy:

1.  JUnit still requires the before/after class methods to be static, which limits
    what you can do prior to the running of tests, TestNG never has this issue.

2.  TestNG @Configuration methods can all take an optional argument to their 
    annotated methods in the form of a ITestResult, XmlTest, Method, or 
    ITestContext.  This allows you to pass things around that JUnit wouldn't 
    provide you.  JUnit only does this in listeners and it is limited in use.

3.  TestNG comes with some pre-made report generation classes that you can copy
     and edit and make into your own beautiful test output with very little 
     effort. Just copy the report class into your project and add a listener 
     to run it.  Also, ReportNG is available.

4.  TestNG has a handful of nice listeners that you can hook onto so you can do
     additional AOP style magic at certain phases during testing.
 3
Author: djangofan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-01 23:27:26

Dlaczego używamy TestNG zamiast JUnit?

  1. Deklaracja metody @BeforeClass i @AfterClass musi być statyczna w JUnit, podczas gdy w deklaracji metody jest większa elastyczność TestNG, nie ma ona tych ograniczeń.

  2. W TestNG możemy parametryzować testy na dwa sposoby. Adnotacja @ Parameter lub @ DataProvider.

    I) @ parametr dla prostych przypadków, w których wymagane jest mapowanie wartości klucza.(dane są dostarczane przez xml plik)

    Ii) @ DataProvider dla złożonych przypadków. Używając tablicy 2 wymiarowej, może dostarczyć dane.

  3. W TestNG, ponieważ metoda @ DataProvider nie musi być statyczna, możemy użyć wielu metod dostawcy danych w tej samej klasie testowej.

  4. Testowanie zależności: w TestNG, jeśli test początkowy się nie powiedzie, to wszystkie kolejne testy zależne zostaną pominięte, a nie oznaczone jako nieudane. Ale JUnit zaznaczyła, że się nie powiodło.

  5. Grupowanie: Pojedyncze testy mogą należeć do wielu grup, a następnie uruchamiać się w różnych kontekstach (np. powolne lub szybkie testy). Podobna funkcja istnieje w kategoriach JUnit, ale brakuje adnotacji @BeforeGroups / @AfterGroups TestNG, które umożliwiają inicjalizację testu / wybieranie go.

  6. Paralelizm: Jeśli chcesz uruchomić ten sam test równolegle w wielu wątkach, TestNG ma cię pokryte prostą w użyciu adnotacją, podczas gdy JUnit nie oferuje prostego sposobu, aby to zrobić z box.

  7. TestNG @ DataProvider może również obsługiwać XML do podawania danych, CSV, a nawet zwykłych plików tekstowych.

  8. TestNG pozwala zadeklarować zależności między testami i pominąć je, jeśli test zależności nie przeszedł pomyślnie.

@Test (dependsOnMethods = {"dependOnSomething"})

Ta funkcjonalność nie istnieje w JUnit

Raporty TestNG są generowane przez domyślnie jest to folder test-output, który zawiera raporty HTML ze wszystkimi danymi testowymi, zdanymi/nieudanymi/pominiętymi, jak długo działały, które Dane wejściowe zostały użyte i pełne dzienniki testów. Ponadto eksportuje wszystko do pliku XML, który można wykorzystać do zbudowania własnego szablonu raportu.

Na froncie JUnit, wszystkie te dane są również dostępne przez XML, ale nie ma raportu out of the box i trzeba polegać na wtyczkach.

Link Do Zasobu:

  1. Szybki JUnit vs TestNG porównanie
  2. JUnit vs. TestNG: którą platformę testową wybrać?

Dobra różnica jest podana w tym samouczku obok siebie: TestNG Vs JUnit: Jaka jest różnica?

 3
Author: SkyWalker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-12 12:52:54