junit vs testng what are differences
Μια ολοκληρωμένη σύγκριση μεταξύ των πλαισίων JUnit Vs TestNG. Περιλαμβάνει τη σύγκριση σχολιασμών και τη σύγκριση με παραδείγματα:
Στο προηγούμενο σεμινάριο, μάθαμε τον σχολιασμό DisplayName και την εκτέλεση δοκιμασίας υπό όρους βάσει διαφορετικών κριτηρίων, όπως η έκδοση JRE, οι περιβαλλοντικές μεταβλητές κ.λπ. Εξετάσαμε επίσης ορισμένες σημαντικές ερωτήσεις σχετικά με το θέμα.
Δεδομένου ότι μαθαίνουμε συνεχώς για το JUnit σε προηγούμενα μαθήματα, αυτό θα λειτουργήσει ως ανάσα για το κοινό μας, όπως θα αλλάξουμε για λίγο την εστίασή μας από το JUnit ως μοναδικό πρόγραμμα στην σύγκριση μεταξύ JUnit έναντι TestNG.
=> Δείτε τον τέλειο οδηγό εκπαίδευσης JUnit εδώ.
Τι θα μάθετε:
- JUnit Vs TestNG: Μια σύγκριση
- συμπέρασμα
JUnit Vs TestNG: Μια σύγκριση
Χαρακτηριστικά | JUnit | ΔοκιμήNG |
---|---|---|
Χρονικό όριο για δοκιμές | Ναί | Ναί |
Πλαίσιο ανοιχτού κώδικα | Ναί Το JUnit είναι ένα πλαίσιο ανοιχτού κώδικα | Ναί Το TestNG είναι ένα πλαίσιο ανοιχτού κώδικα |
Φιλικό προς τον χρήστη | Το JUnit διανέμεται σε διαφορετικές ενότητες, για παράδειγμα: ; Για την παραμετροποίηση μπορεί να χρειαστείτε το JUnit Jupiter. ; Αυτό καθιστά το JUnit ελαφρώς δυσκίνητο στη χρήση σε σύγκριση με το TestNG | Όλες οι λειτουργίες TestNG διατίθενται σε μία ενότητα. Αυτό καθιστά το TestNG πιο φιλικό προς τον χρήστη. |
Σημαντική υποστήριξη IDE ( Παράδειγμα: Eclipse, IntelliJ) | Ναί Και οι δύο υποστηρίζουν το μεγαλύτερο μέρος του IDE | Ναί Και οι δύο υποστηρίζουν το μεγαλύτερο μέρος του IDE |
Υλοποίηση σχολιασμών | Ναί Το JUnit λειτουργεί σε σχολιασμούς με μικρές παραλλαγές για διαφορετικά χαρακτηριστικά | Ναί Το TestNG λειτουργεί σε σχολιασμούς με μικρές παραλλαγές για διαφορετικά χαρακτηριστικά |
Υλοποίηση ισχυρισμών | Ναί Το JUnit παρέχει αρκετούς ισχυρισμούς για την επικύρωση των αναμενόμενων και των πραγματικών αποτελεσμάτων με ορισμένες παραλλαγές των ισχυρισμών στο TestNG | Ναί Το TestNG υποστηρίζει επίσης μια τεράστια λίστα ισχυρισμών για σύγκριση αναμενόμενων και πραγματικών αποτελεσμάτων. Επιπλέον, το TestNG παρέχει δύο μηχανισμούς για ισχυρισμούς - Soft Assertion και Hard Assertion |
Εξαιρέσεις | Ναί Το JUnit παρέχει τη δυνατότητα του Exception test με μια μικρή παραλλαγή στο TestNG | Ναί Το TestNG παρέχει επίσης τη δυνατότητα του Exception test |
Παραμετροποιημένες δοκιμές | Ναί Το JUnit υποστηρίζει παραμετροποιημένες δοκιμές | Ναί Το TestNG υποστηρίζει επίσης παραμετροποιημένες δοκιμές |
Δοκιμαστική σουίτα | Ναί Το JUnit υποστηρίζει τη χρήση δοκιμαστικών σουιτών | Ναί Το TestNG υποστηρίζει επίσης το Test Suite. |
Δοκιμή εξάρτησης | Μην Το JUnit δεν υποστηρίζει τη λειτουργία για δοκιμή εξάρτησης | Ναί Αυτό είναι ένα προηγμένο χαρακτηριστικό στο TestNG over JUnit. Με αυτήν τη δυνατότητα, μια μέθοδος μπορεί να γίνει εξαρτημένη από άλλη έτσι ώστε η μέθοδος να εκτελείται μόνο αφού εκτελεστεί η εξαρτημένη μέθοδος και περάσει αλλιώς η εξαρτημένη δοκιμή δεν θα εκτελεστεί. |
Παράλληλη εκτέλεση δοκιμής | Μην Η παράλληλη εκτέλεση δεν είναι διαθέσιμη στο JUnit | Ναί Το TestNG υποστηρίζει παράλληλη εκτέλεση δοκιμών, αλλά το JUnit δεν το κάνει. Υπάρχει ένα TestNG xml όπου μπορεί να οριστεί παράλληλη εκτέλεση |
Ενσωμάτωση Maven | Ναί Και τα δύο εργαλεία υποστηρίζουν το Maven Integration | Ναί Και τα δύο εργαλεία υποστηρίζουν το Maven Integration |
Εφαρμογές των Υποθέσεων | Ναί Οι υποθέσεις χρησιμοποιούνται για την παράλειψη δοκιμών βάσει ορισμένων υποθέσεων ή συνθηκών και αυτό ισχύει μόνο στο JUnit. | Μην Το TestNG δεν υποστηρίζει υποθέσεις |
Διάταξη εκτέλεσης δοκιμής | Ναί Το Junit υποστηρίζει τη σειρά εκτέλεσης δοκιμής. | Ναί Το TestNG υποστηρίζει τη σειρά εκτέλεσης των δοκιμών |
Εφαρμογή ακροατών | Ναί Το JUnit υποστηρίζει τους ακροατές όχι μέσω σχολιασμών αλλά μέσω του API ακροατών. | Ναί Το TestNG υποστηρίζει τους ακροατές μέσω σχολιασμών. |
Παράβλεψη δοκιμών | Ναί Και οι δύο υποστηρίζουν την απενεργοποίηση των δοκιμών, αλλά το JUnit υποστηρίζει την απενεργοποίηση των δοκιμών για εκτέλεση με βάση διαφορετικές συνθήκες | Ναί Και τα δύο υποστηρίζουν την απενεργοποίηση των δοκιμών |
Αναφορά | Ναί Το JUnit πρέπει να ενσωματωθεί στο maven για τη δημιουργία αναφορών HTML | Ναί Το TestNG έχει ενσωματωμένες αναφορές HTML. Μπορεί να ενσωματωθεί και με maven ή εξωτερικές βιβλιοθήκες αναφορών, όπως ATU report ή Extent report |
Σύγκριση σχολιασμών
Το TestNG και το JUnit είναι και τα δύο πλαίσια δοκιμών μονάδων από τον κόσμο της Java. Και τα δύο εφαρμόζουν πολύ πιο κοντά και παρόμοια χαρακτηριστικά. Σε αυτήν την ενότητα, θα εξετάσουμε κάποιες ομοιότητες κατά την εφαρμογή δύο χαρακτηριστικών, ενώ θα δούμε επίσης μερικές άλλες λειτουργίες που εφαρμόζονται διαφορετικά στο JUnit και στο TestNG.
# 1) Σχολιασμός μεθόδου δοκιμής
Δεν υπάρχει διαφορά στον τρόπο που καθορίζουμε μια μέθοδο ως μέθοδος δοκιμής τόσο στο JUnit όσο και στο TestNG.
JUnit 5 | ΔοκιμήNG |
---|---|
@Δοκιμή | @Δοκιμή |
# 2) Σχολιασμός που σχετίζεται με τη σουίτα
- Μια μέθοδος με σχολιασμό @BeforeSuite εκτελείται μία φορά πριν από την εκτέλεση της τρέχουσας δοκιμαστικής σουίτας.
- Αυτός ο σχολιασμός ισχύει μόνο στο TestNG.
JUnit 5 | ΔοκιμήNG |
---|---|
Δεν εφαρμόζεται | @BeforeSuite |
# 3) Σχολιασμός για μια μέθοδο πριν από την τάξη
Αυτός είναι ο σχολιασμός για τη μέθοδο που θα εκτελεστεί μία φορά πριν από την εκτέλεση της πρώτης μεθόδου δοκιμής στην τάξη.
JUnit 5 | ΔοκιμήNG |
---|---|
@BeforeAll | @Πριν το μάθημα |
# 4) Σχολιασμός για μια μέθοδο πριν από τη δοκιμή
- Αυτός ο σχολιασμός εκτελείται μία φορά πριν από τις μεθόδους που δηλώνονται στην ετικέτα testng.xml.
- Αυτός ο σχολιασμός είναι διαθέσιμος μόνο για TestNG.
JUnit 5 | ΔοκιμήNG |
---|---|
Δεν εφαρμόζεται | @BeforeTest |
# 5) Σχολιασμός για τη μέθοδο που θα εκτελεστεί πριν από κάθε μέθοδο με επίκληση του @Test
JUnit 5 | ΔοκιμήNG |
---|---|
@BeforeEach | @BeforeMethod |
# 6) Σχολιασμός για τη μέθοδο που θα εκτελεστεί μετά από κάθε μέθοδο με επίκληση του @Test
JUnit 5 | ΔοκιμήNG |
---|---|
@AfterEach | @AfterMethod |
# 7) Σχολιασμός για τη μέθοδο μετά τη δοκιμή
- Αυτός ο σχολιασμός εκτελείται μία φορά μετά τις μεθόδους που δηλώνονται στην ετικέτα testng.xml.
- Αυτός ο σχολιασμός είναι διαθέσιμος μόνο για TestNG.
JUnit 5 | ΔοκιμήNG |
---|---|
Δεν εφαρμόζεται | @AfterTest |
# 8) Σχολιασμός για τη μέθοδο μετά την τάξη
Αυτός είναι ο σχολιασμός για τη μέθοδο που θα εκτελεστεί μία φορά μετά την εκτέλεση της τελευταίας μεθόδου δοκιμής στην τάξη.
JUnit 5 | ΔοκιμήNG |
---|---|
@AfterAll | @Μετά το μάθημα |
# 9) Σχολιασμός για απενεργοποίηση της εκτέλεσης της μεθόδου δοκιμής.
- Το JUnit 5 παρέχει έναν σχολιασμό για την απενεργοποίηση μιας συγκεκριμένης εκτέλεσης δοκιμής.
- Το TestNG παρέχει ένα χαρακτηριστικό για το @Test, δηλαδή «ενεργοποιημένο» με τη δυαδική τιμή που αποφασίζει εάν η εκτέλεση της μεθόδου θα απενεργοποιηθεί ή θα ενεργοποιηθεί
JUnit 5 | ΔοκιμήNG |
---|---|
@αγνοώ | @Test (ενεργοποιημένο = false) |
Αναφέρομαι σε Εκμάθηση 7 Παράλειψη εκτέλεσης για να καταλάβετε πώς να απενεργοποιήσετε τις δοκιμές στο JUnit4 εναντίον JUnit 5
# 10) Σχολιασμός χρονικού ορίου
Ο σχολιασμός είναι ίδιος για το JUnit 5 και το TestNG
JUnit 5 | ΔοκιμήNG |
---|---|
@Test (χρονικό όριο = 2000) | @Test (χρονικό όριο = 2000) |
# 11) Αναμενόμενο χαρακτηριστικό εξαίρεσης
- Η κατηγορία εξαίρεσης δηλώνει ότι όταν εκτελείται η δοκιμή, απορρίπτεται η εξαίρεση της συγκεκριμένης κλάσης.
- Αυτό υποστηρίζεται τόσο στο JUnit όσο και στο TestNG με παραλλαγή στον τρόπο δήλωσης και των δύο.
JUnit 5 | ΔοκιμήNG | |
---|---|---|
@Test (αναμένεται = NullPointerException.class) | @Test (توقعException = NullPointerException.class) |
# 12) Σχολιασμός που σχετίζεται με τη σουίτα
- Μια μέθοδος με σχολιασμό @AfterSuite εκτελείται μία φορά μετά την εκτέλεση της τρέχουσας δοκιμαστικής σουίτας.
- Αυτός ο σχολιασμός ισχύει μόνο στο TestNG.
JUnit 5 | ΔοκιμήNG |
---|---|
Δεν εφαρμόζεται | @AfterSuite |
# 13) Σχολιασμός σχετικά με την ομάδα
- Ο σχολιασμός είναι διαθέσιμος μόνο στο TestNG.
- Η μέθοδος με σχολιασμό @BeforeGroups εκτελείται πριν από την εκτέλεση των μεθόδων δοκιμής που ανήκουν σε μια συγκεκριμένη ομάδα.
JUnit 5 | ΔοκιμήNG | |
---|---|---|
Δεν εφαρμόζεται | @BeforeGroups |
- Ο σχολιασμός είναι διαθέσιμος μόνο στο TestNG.
- Η μέθοδος με σχολιασμό @BeforeGroups εκτελείται μετά την εκτέλεση των δοκιμαστικών μεθόδων που ανήκουν σε μια συγκεκριμένη ομάδα.
JUnit 5 | ΔοκιμήNG |
---|---|
Δεν εφαρμόζεται | @AfterGroups |
# 14) Σχολιασμοί σχετικοί με την εκτέλεση
Τόσο το JUnit όσο και το TestNG υποστηρίζουν ρητά τη σειρά δοκιμών για εκτέλεση. Με άλλα λόγια, ο καθορισμός προτεραιότητας για δοκιμαστικές περιπτώσεις.
- Το JUnit 5 έχει σχολιασμό @TestMethodOrder () με την ενσωματωμένη κλάση του πακέτου MethodOrderer - Alphanumeric.class ή OrderAnnotation.class ή Random.class ως παράμετρο εισαγωγής για τον σχολιασμό.
Αναφέρομαι σε Tutorial 9 - Εντολή εκτέλεσης δοκιμής Junit για περισσότερες λεπτομέρειες σχετικά με τη ρύθμιση της σειράς εκτέλεσης δοκιμής στο JUnit.
- Το TestNG περιλαμβάνει το χαρακτηριστικό 'priority' για το σχολιασμό @Test, το οποίο δέχεται μια αριθμητική τιμή.
JUnit 5 | ΔοκιμήNG |
---|---|
@TestMethodOrder (Alphanumeric.class) | @Test (προτεραιότητα = 1) |
Βασικό πρόγραμμα για TestNG και JUnit 4
# 1) Κωδικός TestNG
package newtest.com; import org.testng.annotations.Test; import org.testng.annotations.BeforeMethod; import org.testng.annotations.AfterMethod; import org.testng.annotations.DataProvider; import org.testng.annotations.BeforeClass; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeTest; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeSuite; import org.testng.annotations.AfterSuite; public class NewTestng { @Test(dataProvider = 'dp') public void f(Integer n, String s) { System.out.println(' * * * * * * *Parameterized method * * * * * * * * * '); System.out.println('Integer '+n+' String '+s); System.out.println(' * * * * * * * * * * * * * * * * '); } @BeforeMethod public void beforeMethod() { System.out.println('Before Method'); } @AfterMethod public void afterMethod() { System.out.println('After Method'); } @DataProvider public Object()() dp() { return new Object()() { new Object() { 1, 'a' }, new Object() { 2, 'b'}, }; } @BeforeClass public void beforeClass() { System.out.println('Before Class'); } @AfterClass public void afterClass() { System.out.println('After Class'); } @BeforeTest public void beforeTest() { System.out.println('Before Test'); } @AfterTest public void afterTest() { System.out.println('After Test'); } @BeforeSuite public void beforeSuite() { System.out.println('Before Suite'); } @AfterSuite public void afterSuite() { System.out.println('After Suite'); } }
Αναμενόμενη παραγωγή:
# 2) Κωδικός JUnit 4
package demo.tests; import static org.junit.Assert.*; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.BeforeClass; import org.junit.AfterClass; public class JunitTest { @Parameterized.Parameters public static Object()() data() { return new Object(3)(0); } @BeforeClass public static void beforeClass() { System.out.println('Before Class'; } @Before public void beforeMethod() { System.out.println('Before Method'); } @Test public void f() { System.out.println(' * * * * * * *test * * * * * * * * * '); int n=10; System.out.println('Integer '+n); System.out.println(' * * * * * * * * * * * * * * * * '); } @After public void afterMethod() { System.out.println('After Method'); } @AfterClass public static void afterClass() { System.out.println('After Class'); } }
Αναμενόμενη παραγωγή:
JUnit 5 vs TestNG: Διαφορά χαρακτηριστικών με παραδείγματα
# 1) Test Suite
- Η δοκιμαστική σουίτα είναι μια συλλογή δοκιμών, που σημαίνει ότι είμαστε κάπως τυλιγμένοι σε πολλές δοκιμαστικές περιπτώσεις από πολλές τάξεις μαζί.
- Η προσέγγιση που χρησιμοποιεί το TestNG suite είναι διαφορετική και ισχυρή σε σύγκριση με αυτή του JUnit.
Δοκιμαστική σουίτα στο JUnit 5
Ας δούμε γρήγορα πώς εφαρμόζει το JUnit 5 η δοκιμαστική σουίτα.
Αναφέρομαι σε Tutorial 8 -JUnit Test Suites & Φιλτράρισμα Testcases για καλύτερη κατανόηση της εφαρμογής της δοκιμαστικής σουίτας στο JUnit 4 και στο JUnit 5.
@RunWith(JUnitPlatform.class) @SelectClasses({JUnit5TestCase1.class, JUnit5TestCase2.class }) public class JUnitTestSuite { }
Δοκιμαστική σουίτα στο TestNG
Το TestNG χρησιμοποιεί το XML ως το παρακάτω πρότυπο για να ολοκληρώσει όλες τις λογικά συνδεδεμένες τάξεις δοκιμής
# 2) Παραμετροποιημένη δοκιμή
Τόσο το TestNG όσο και το JUnit επιτρέπουν την παραμετροποίηση των δοκιμών που δεν είναι τίποτα άλλο από την εκτέλεση των ίδιων δοκιμών με παραλλαγές δεδομένων.
Παραμετροποιημένη δοκιμή σε JUnit 4
@RunWith(value=Parameterized.class) public class JUnitclass{ int n; public JUnitclass (int num){ this.n=num; } @Parameters public static Iterable data(){ Object()() objectArray =new Object()() {{1},{2},{3}}; returnArrays.asList(objectArray); } @Test public void Junittst(){ System.out.println(“Multiples of 2 are :”+ 2*n); } }
Παραμετροποιημένη δοκιμή στο TestNG
Υπάρχουν 2 τρόποι με τους οποίους θα μπορούσατε να χρησιμοποιήσετε την παραμετροποίηση στο TestNG
- @ Παράμετροι και περνώντας από το TestNG XML
- Σχολιασμός @DataProvider
a) @Parameters και περνώντας από το TestNG XML
public class testins{ @Test @Parameters(value=”env_pd”) public void paramEnv(str env_pd){ If(env_pd=”QA”){ url=”definetest.com” } else if(env_pd=”accpt”){ url=”defineacc.com” }}}
XML για το ίδιο
β) Παροχέας δεδομένων
Ο σχολιασμός DataProvider επιστρέφει πάντα το αντικείμενο () () που είναι ο πίνακας αντικειμένων.
@DataProvider(name='state') public Object()() getDataFromDataprovider(){ return new Object()() { { 'Maharashtra', 'Pune' }, { 'Karnataka', 'Bangalore' }, { 'Kerala', 'Trivandrum' } }; @Test(dataProvider=”state”) public void paramMethd(str stateName, str cityName){ System.out.println(stateName+” ”+cityName); }
# 3) Χρονικό όριο
Εάν μια συγκεκριμένη δοκιμή δεν ολοκληρωθεί εντός του καθορισμένου χρόνου, τότε λαμβάνει ένα χρονικό όριο. Σε άλλο, το νήμα διακόπτεται.
καλύτερες εφαρμογές γραφής για τα Windows 10
Χρονικό όριο στο JUnit
Υπάρχουν διαφορετικές προσεγγίσεις για την εφαρμογή Timeout στο JUnit. Αυτά είναι:
- Χρησιμοποιώντας το συνηθισμένο χρονικό όριο με συγκεκριμένα χιλιοστά του δευτερολέπτου
- Χρήση χρονικού ορίου με τον ισχυρισμό
- Χρήση καθολικού χρονικού ορίου
Θα έχουμε ένα λεπτομερές σεμινάριο που θα εστιάζει στο χρονικό όριο για τα JUnit 4 και JUnit 5.
Ακολουθεί το απόσπασμα που δείχνει τη χρήση του συνηθισμένου χρονικού ορίου στο JUnit 5:
@Test(timeout = 5000) public void testTimeout() throws InterruptedException { while (true) { } }
Το παραπάνω χρονικό όριο δοκιμής μετά από 5 δευτερόλεπτα.
Χρονικό όριο στο TestNG
Το TestNG χρησιμοποιεί επίσης τον απλό τρόπο υλοποίησης του Timeout:
@Test(timeout = 5000) public void testTimeout() throws InterruptedException { while (true) { } }
# 4) Δοκιμή εξαίρεσης
Η δοκιμή εξαίρεσης διασφαλίζει ότι όταν υπάρχει αυτή η προκαθορισμένη εξαίρεση που ρίχνεται, θα συλλαμβάνεται και ειδοποιείται με χαρά στα αρχεία καταγραφής.
Δοκιμή εξαίρεσης στο JUnit 4
@Test (expected = NumberFormatException.class) public void converttoint() { Int j=Integer.parseInt(“Four”); }
Θα υπάρχει ένα ξεχωριστό σεμινάριο που θα καλύπτει λεπτομερώς τις Εξαιρέσεις για το JUnit 4 και 5.
Δοκιμή εξαίρεσης στο TestNG
Υπάρχει μια μικρή αλλαγή στη δήλωση εξαίρεσης δοκιμής στο TestNG:
@Test (expectedExceptions = NumberFormatException.class) public void converttoint() { Int j=Integer.parseInt(“Four”); }
# 5) Απενεργοποίηση δοκιμής
Τόσο το TestNG όσο και το JUnit επιτρέπει την απενεργοποίηση μιας δοκιμής για εκτέλεση.
Απενεργοποιημένη δοκιμή στο JUnit 5
@ Απενεργοποιημένος σχολιασμός όταν χρησιμοποιείται στην κορυφή της τάξης, όλες οι δοκιμές στην τάξη παραλείπονται για εκτέλεση. Ο σχολιασμός όταν χρησιμοποιείται πάνω από μια συγκεκριμένη μέθοδο @Test, η συγκεκριμένη δοκιμαστική περίπτωση απενεργοποιείται για εκτέλεση.
import org.junit.AfterClass; @Disabled('the testcase is under development') public class JUnitProgram {
Απενεργοποιημένη δοκιμή στο TestNG
Το TestNG επιτρέπει σε μια δοκιμή να απενεργοποιήσει την εκτέλεση για μια δοκιμή όταν το χαρακτηριστικό 'ενεργοποιημένο' του σχολιασμού @Test έχει οριστεί σε false και ενεργοποιείται όταν το χαρακτηριστικό έχει οριστεί σε true. Εάν πρέπει να ενεργοποιηθούν όλες οι δοκιμές σε μια τάξη, τότε επισημάνετε ρητά το enabled = true για κάθε μέθοδο @Test.
Ακολουθεί το απόσπασμα κώδικα που δείχνει την παράλειψη μιας δοκιμής.
@Test(enabled=false) public void f_validate(){ // let us skip this function}
# 6) Ομαδικές δοκιμές
Υπήρξαν αντιφατικές δηλώσεις σε πολλούς ιστότοπους και φόρουμ όπου οι άνθρωποι ανέφεραν ότι το JUnit δεν υποστήριξε ποτέ την ομαδοποίηση δοκιμών με το συγκεκριμένο όνομα ομάδας.
Σχολιασμοί @BeforeGroups και @AfterGroups έρχονται μόνο με το TestNG, ωστόσο η ομαδοποίηση επιτρέπεται τόσο στο JUnit 4 όσο και στο JUnit 5. Εδώ θα δείξουμε γρήγορα τη χρήση ομαδικών δοκιμών στο JUnit 5. Οι ομαδικές δοκιμές αναφέρονται ως Κατηγορίες στο JUnit 4 και Tags στο JUnit 5.
Μπορείτε να ανατρέξετε Tutorial 8 - JUnit Test Suites & Φιλτράρισμα δοκιμών για λεπτομέρειες σχετικά με τη χρήση στο JUnit.
Ομαδικές δοκιμές στο JUnit 5
@Tag(“Regression”) @Test public void junitMethod1(){} @Tag(“SmokeTest”) @Test public void junitMethod2(){
Απόσπασμα κώδικα από JUnit5TestSuite.java:
Ο παρακάτω κώδικας περιλαμβάνει την ομάδα με το όνομα 'Regression' και αποκλείει την ομάδα 'SmokeTest' η οποία υπονοεί ότι το junitMethod1 () θα εκτελεστεί, ωστόσο το junitMethod2 () εξαιρείται.
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeTags(“Regression”) @ExcludeTags(“SmokeTest”) public class JUnit5TestSuite { }
Ομαδικές δοκιμές στο TestNG
Εάν το παραπάνω απόσπασμα πρέπει να ερμηνευθεί στο TestNG, τότε παρακάτω είναι ο κωδικός για το ίδιο:
@Test(groups={“Regression” }) public void junitMethod1(){} @Test(groups={“SmokeTest” }) public void junitMethod2(){}
Το TestNG XML έχει ως εξής:
Εδώ, οι μέθοδοι της ομάδας παλινδρόμησης περιλαμβάνονται στον δρομέα, ενώ οι υπόλοιπες ομάδες, συμπεριλαμβανομένου του SmokeTest, αποκλείονται.
# 7) Παράλληλες δοκιμές
Αυτή είναι η δυνατότητα που είναι διαθέσιμη μόνο με το TestNG. Συνήθως, οι δοκιμαστικές θήκες είναι ένα είδος νημάτων που επικαλούνται το ένα μετά το άλλο. Ωστόσο, εάν θέλετε να εξοικονομήσετε χρόνο εκτέλεσης, μπορείτε να το ελέγξετε στο TestNG ρυθμίζοντας τις δοκιμές να εκτελούνται παράλληλα και παρέχοντας τον αριθμό των νημάτων που πρέπει να εκτελεστούν ταυτόχρονα.
Θα δείξουμε εν συντομία ότι η χρήση εξαρτάται από μεθόδους εδώ και δεν θα συζητήσουμε εξαρτάται από ομάδες.
Η εξαρτημένη δοκιμή από μια άλλη μέθοδο ορίζεται μέσω του TestNG XML ως εξής:
# 8) Εξαρτημένες δοκιμές
Οι εξαρτημένες δοκιμές είναι προηγμένες δυνατότητες που διατίθενται μόνο με το TestNG. Οι εξαρτήσεις θα μπορούσαν να είναι σε ένα τεστ ή σε μια ομάδα.
@Test mytest1(){ System.out.println(“My test : mytest1”); } @Test (dependensOnMethods={“mytest1”}) public void mytest2(){ System.out.println(“My test : mytest2”); }
Στο παραπάνω πρόγραμμα, καθώς το mytest2 εξαρτάται από το mytest1, εκτελείται το πρώτο mytest1 και στη συνέχεια εκτελείται το mytest2. Εάν το mytest1 αποτύχει, τότε το mytest2 δεν θα γίνει επίκληση. Αυτός είναι ο τρόπος με τον οποίο εξαρτώνται οι δοκιμαστικές περιπτώσεις για τον έλεγχο μιας συγκεκριμένης ροής εργασίας που θέλετε να εκτελέσετε.
# 9) Ακούστες
Οι ακροατές ακούνε κάθε συμβάν που συμβαίνει εντός των δοκιμών. Οι ακροατές υποστηρίζονται τόσο στο JUnit όσο και στο TestNG. Έτσι, εάν θέλετε να εκτελέσετε συγκεκριμένες εργασίες ή να εμφανίσετε ένα συγκεκριμένο μήνυμα στο αρχείο καταγραφής πριν από την έναρξη της δοκιμής, μετά την ολοκλήρωση της δοκιμής, όταν παραλείπεται η δοκιμή, όταν η δοκιμή περάσει ή αποτύχει, έχουμε αυτές τις λειτουργίες ακρόασης που μας επιτρέπουν να Κάνε αυτό
Το JUnit χρησιμοποιεί την κλάση Listener και το TestNG χρησιμοποιεί μια διεπαφή Listener. Το TestNG γράφει μια κλάση ακροατή που ορίζει τις μεθόδους διεπαφής ακροατή και το δεύτερο βήμα είναι να καλέσετε αυτό το όνομα κλάσης ακροατή χρησιμοποιώντας σχολιασμό @Listeners στην κύρια τάξη.
Το JUnit κληρονομεί επίσης τις μεθόδους από την γονική κλάση του Listener, μετά από την οποία μια κλάση Runner Runner ορίζεται για να εφαρμόζει τις λειτουργίες του ακροατή σε μία ή περισσότερες κύριες τάξεις.
Ακρόαση στο TestNG
Υπάρχει μια διεπαφή ITestListener από την οποία εφαρμόζεται το TestNG.
Ακολουθούν οι μέθοδοι που πρέπει να καθοριστούν κατά την εφαρμογή του ITestListener -
- OnTestStart ()
- OnTestFailure ()
- OnTestSuccess ()
- OnTestSkipped ()
- Εκκίνηση ()
- OnFinish ()
Ακολουθεί το απόσπασμα κώδικα που δείχνει onTestStart () και onTestSuccess ()
import org.testng.ITestListener; import org.testng.ITestResult; public class TestListener implements ITestListener { @Override public void onTestStart(ITestResult result) { System.out.println('Execution started: '+result.getName()); } @Override public void onTestSuccess(ITestResult result) { System.out.println('Test Passed '+result.getName()); }
Καλέστε αυτήν την τάξη ακροατών στην κύρια τάξη σας όπως φαίνεται παρακάτω, χρησιμοποιώντας το σχολιασμό @Listener:
import org.testng.annotations.Listeners; import org.testng.annotations.Test; @Listeners(com.javatpoint.Listener.class) public class MymainClass { @Test public void sum() {
Ακρόαση στο JUnit 5
Το RunListener είναι η κλάση που πρέπει να επεκταθεί από την κλάση ακροατή σας για να καθορίσετε τις λειτουργίες του Listener.
Έχουμε μεθόδους ως εξής για το JUnit:
- testRunStarted
- testRunFinished
- testFailure
- αγνοήθηκαν
import org.junit.runner.notification.Failure; import org.junit.runner.notification.RunListener; public class Mylistenerclass extends RunListener { public void testRunStarted(Description desc) throws java.lang.Exception { System.out.println('Execution started' + desc.getMethodName()); } public void testRunFinished(Description desc) throws java.lang.Exception { System.out.println('Execution finished' + desc.getMethodName()); }
Πρέπει να δημιουργηθεί μια κλάση εκτέλεσης ακροατή για να επικαλεστεί την παραπάνω κλάση ακροατή.
λογισμικό λήψης βίντεο από οποιονδήποτε ιστότοπο
Μπορείτε να εφαρμόσετε την κλάση ακροατή Mylistener σε πολλές κατηγορίες με μεθόδους δοκιμής.
public class ListenerRunner { public static void main(String() args) { JUnitCore runme = new JUnitCore(); runme.addListener(new ListenerRunner()); runner.run(FirstClass.class, SecondClass.class); }
συμπέρασμα
Σε αυτό το σεμινάριο JUnit Vs TestNG, έχουμε συγκρίνει τα πλαίσια TestNG και JUnit. Μάθαμε τις κοινές λειτουργίες που υποστηρίζονται τόσο στα πλαίσια όσο και στις πρόσθετες λειτουργίες που υποστηρίζονται μόνο στο TestNG. Προφανώς, υπάρχουν μερικά επιπλέον χαρακτηριστικά μόνο στο TestNG, όπως παράλληλη εκτέλεση και δοκιμές εξάρτησης. Τα περισσότερα από τα χαρακτηριστικά που υποστηρίζονται από το TestNG είναι επίσης διαθέσιμα στο JUnit.
Υπάρχουν μικρές αποκλίσεις όσον αφορά τη σύνταξη, τις ορολογίες στο JUnit εναντίον TestNG για τα κοινά χαρακτηριστικά. Όσοι υπονόμευσαν τη δύναμη του JUnit έναντι του TestNG θα είχαν συνειδητοποιήσει μέχρι τώρα, δηλαδή το JUnit είναι επίσης ένα από τα ισχυρά πλαίσια αυτοματισμού.
Θα επιστρέψουμε με πολλές πιο ενδιαφέρουσες πτυχές του JUnit. Παραμείνετε στα προσεχή μαθήματα !!!
Συνιστώμενη ανάγνωση
- Tutorial JUnit για αρχάριους - Τι είναι το JUnit Testing
- Λίστα σχολίων JUnit: JUnit 4 Vs JUnit 5
- Πώς να χρησιμοποιήσετε το JUnit 5 Annotation @ReppledTest με παραδείγματα
- JUnit Ignore Test Case: JUnit 4 @Ignore Vs JUnit 5 @Disabled
- Εγκατάσταση TestNG, Βασικό πρόγραμμα και αναφορές
- Σχολιασμοί και ακροατές TestNG
- Tutorial TestNG: Εισαγωγή στο TestNG Framework
- Ισχυρισμοί στο Σελήνιο χρησιμοποιώντας πλαίσια Junit και TestNG