TestNG vs JUnit – Διαφορά μεταξύ τους
Βασική διαφορά μεταξύ TestNG και JUnit
- TestNG είναι ένα Java-βασισμένο πλαίσιο, ενώ JUnit είναι ένα Unit Testing Framework ανοιχτού κώδικα για JAVA.
- Συγκρίνοντας TestNG Vs JUnit, TestNG Οι σχολιασμοί είναι πιο εύκολοι στη χρήση και κατανόηση από ό JUnit.
- TestNG μας επιτρέπει να δημιουργήσουμε παράλληλα τεστ, ενώ JUnit δεν υποστηρίζει την εκτέλεση παράλληλων δοκιμών.
- In TestNG, Οι περιπτώσεις δοκιμής μπορούν να ομαδοποιηθούν μαζί, ενώ σε JUnit, Δεν είναι δυνατή η ομαδοποίηση των δοκιμών.
Τι είναι TestNG?
TestNG είναι ένα πλαίσιο δοκιμών αυτοματισμού στο οποίο το NG σημαίνει «Επόμενη Γενιά». TestNG εμπνέεται από JUnit που χρησιμοποιεί τους σχολιασμούς (@). TestNG ξεπερνά τα μειονεκτήματα του JUnit και έχει σχεδιαστεί για να κάνει δοκιμή από άκρο σε άκρο εύκολη.
Χρησιμοποιώντας TestNG, μπορείτε να δημιουργήσετε μια σωστή αναφορά και μπορείτε εύκολα να μάθετε πόσες περιπτώσεις δοκιμής πέρασαν, απέτυχαν και παραλείφθηκαν. Μπορείτε να εκτελέσετε τις αποτυχημένες δοκιμαστικές περιπτώσεις ξεχωριστά.
Τι είναι το Junit;
JUnit είναι μια μονάδα ανοιχτού κώδικα Δοκιμές Πλαίσιο για JAVA. Είναι χρήσιμο για Java Προγραμματιστές να γράφουν και να εκτελούν επαναλαμβανόμενες δοκιμές. Ο Erich Gamma και ο Kent Beck το αναπτύσσουν αρχικά. Είναι ένα παράδειγμα αρχιτεκτονικής xUnit. Όπως υποδηλώνει το όνομα, χρησιμοποιείται για Δοκιμή μονάδας ενός μικρού κομματιού κώδικα.
Οι προγραμματιστές που ακολουθούν τη μεθοδολογία που βασίζεται σε δοκιμές πρέπει να γράψουν και να εκτελέσουν πρώτα τη δοκιμή μονάδας πριν από οποιονδήποτε κώδικα.
Μόλις τελειώσετε με τον κώδικα, θα πρέπει να εκτελέσετε όλες τις δοκιμές και θα πρέπει να περάσει. Κάθε φορά που προστίθεται οποιοσδήποτε κώδικας, πρέπει να εκτελείτε ξανά όλες τις περιπτώσεις δοκιμής και να βεβαιωθείτε ότι τίποτα δεν έχει σπάσει.
Οι διαφορές μεταξύ των JUnit και TestNG
Και τα δύο TestNG και JUnitΤο 4 φαίνεται παρόμοιο, εκτός από ένα ή δύο χαρακτηριστικά. Ας κάνουμε μια σύγκριση μεταξύ των δύο για να αποφασίσουμε γρήγορα ποια τεχνολογία είναι πιο ευνοϊκή για Unit Testing. Ο παρακάτω πίνακας επισημαίνει τις δυνατότητες που υποστηρίζονται και από τα δύο:
Οι σχολιασμοί
Και τα δύο JUnit και TestNG χρησιμοποιεί σχολιασμούς και σχεδόν όλοι οι σχολιασμοί μοιάζουν.
TestNG χρησιμοποιεί το @BeforeMethod,@AfterMethod παρόμοια με το @Before,@After in JUnit4.
Και τα δύο TestNG και το Junit4 χρησιμοποιεί το @Test(timeout = 1000) για timeout .Ελέγξτε τον παρακάτω πίνακα για περισσότερες λεπτομέρειες-
SN | Descriptιόν | TestNG | JUnit 4 |
---|---|---|---|
1 | Σχολιασμός δοκιμής | @Δοκιμή | @Δοκιμή |
2 | Εκτελείται πριν κληθεί η πρώτη μέθοδος δοκιμής στην τρέχουσα κλάση | @Πριν το μάθημα | @Πριν το μάθημα |
3 | Εκτελεί μετά από όλες τις μεθόδους δοκιμής στην τρέχουσα κλάση | @Μετά το μάθημα | @Μετά το μάθημα |
4 | Εκτελείται πριν από κάθε μέθοδο δοκιμής | @BeforeMethod | @Πριν |
5 | Εκτελείται μετά από κάθε μέθοδο δοκιμής | @AfterMethod | @Μετά |
6 | σχολιασμός για να αγνοήσετε μια δοκιμή | @Test(enable=false) | @αγνοώ |
7 | σχολιασμός για εξαίρεση | @Test(expectedExceptions = ArithmeticException.class) | @Test(αναμενόμενο = ArithmeticException.class) |
8 | χρονικού ορίου | @Test (timeout = 1000) | @Test (timeout = 1000) |
9 | Εκτελείται πριν από όλες τις δοκιμές στη σουίτα | @BeforeSuite | n / a |
10 | Εκτελείται μετά από όλες τις δοκιμές στη σουίτα | @AfterSuite | n / a |
11 | Εκτελείται πριν από την εκτέλεση μιας δοκιμής | @BeforeTest | n / a |
12 | Εκτελείται μετά από μια δοκιμαστική εκτέλεση | @AfterTest | n / a |
13 | Εκτελείται πριν από την κλήση της πρώτης μεθόδου δοκιμής που ανήκει σε οποιαδήποτε από αυτές τις ομάδες | @BeforeGroups | n / a |
14 | εκτελέστε μετά την τελευταία μέθοδο δοκιμής που ανήκει σε οποιαδήποτε από τις ομάδες εδώ | @AfterGroups | n / a |
Δοκιμή σουίτας
Οι σουίτες χρησιμοποιούνται για την εκτέλεση πολλαπλών δοκιμών μαζί. Οι σουίτες μπορούν να δημιουργηθούν χρησιμοποιώντας και τα δύο TestNG και JUnit4. Ωστόσο, οι σουίτες είναι πιο ισχυρές TestNG καθώς χρησιμοποιεί πολύ διαφορετική μέθοδο για την εκτέλεση δοκιμών. Ας το κατανοήσουμε χρησιμοποιώντας απόσπασμα κώδικα όπως δίνεται παρακάτω:
Χρησιμοποιώντας JUnit4
Η παρακάτω τάξη περιγράφει τη χρήση της σουίτας κατά την εργασία με JUnit4:
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 }
Χρησιμοποιώντας TestNG
TestNG χρησιμοποιεί το xml για τη δέσμη όλων των δοκιμών σε ένα μέρος. Παρακάτω το xml περιγράφει τη χρήση της σουίτας κατά την εργασία με TestNG:
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" > <suite name="My test suite"> <test name="testing"> <classes> <class name="com.guru99.SuiteTest1" /> <class name="com.guru99.SuiteTest2" /> </classes> </test> </suite>
Παράβλεψη δοκιμής
Χρησιμοποιώντας και τα δύο μπορούμε να παραλείψουμε μια δοκιμή . Ας τη δούμε χρησιμοποιώντας παράδειγμα κώδικα όπως δίνεται παρακάτω:
Χρησιμοποιώντας JUnit4
Το παρακάτω απόσπασμα κώδικα περιγράφει τη χρήση του σχολιασμού @ignore κατά την εργασία με JUnit4:
@Ignore public void method1() { System.out.println("Using @Ignore , this execution is ignored"); }
Χρησιμοποιώντας TestNG
Το παρακάτω απόσπασμα κώδικα περιγράφει τη χρήση του σχολιασμού @Test(enabled=false) κατά την εργασία με TestNG:
@Test(enabled=false) public void TestWithException() { System.out.println("Method should be ignored as it's not ready yet"); }
Δοκιμή Εξαίρεσης
Η δοκιμή εξαίρεσης είναι διαθέσιμη και στις δύο TestNG και JUnit4. Χρησιμοποιείται για τον έλεγχο, ποια εξαίρεση ρίχνεται από το τεστ;
Χρησιμοποιώντας JUnit4
Το παρακάτω απόσπασμα κώδικα περιγράφει τη χρήση της δοκιμής εξαίρεσης κατά την εργασία με JUnit4:
@Test(expected = ArithmeticException.class) public void divideByZero() { Int i = 1/0; }
Χρησιμοποιώντας TestNG
Το παρακάτω απόσπασμα κώδικα περιγράφει τη χρήση της δοκιμής εξαίρεσης κατά την εργασία με TestNG:
@Test(expectedExceptions = ArithmeticException.class) public void divideByZero() { Int i = 1/0; }
Χρονικό όριο
Αυτή η δυνατότητα εφαρμόζεται τόσο στο TestNg όσο και στο JUnit4.Timeout χρησιμοποιείται για τον τερματισμό μιας δοκιμής που διαρκεί περισσότερο από τον καθορισμένο χρόνο (σε χιλιοστά του δευτερολέπτου).
Χρησιμοποιώντας JUnit4
Το παρακάτω απόσπασμα κώδικα περιγράφει τη χρήση του τεστ χρονικού ορίου κατά την εργασία με JUnit4:
@Test(timeout = 1000) public void method1() { while (true); }
Χρησιμοποιώντας TestNG
Το παρακάτω απόσπασμα κώδικα περιγράφει τη χρήση του τεστ χρονικού ορίου κατά την εργασία με TestNG:
@Test(timeOut = 1000) public void method1() { while (true); }
Παραμετροποιημένη δοκιμή
JUnit παρέχει μια ευκολότερη και ευανάγνωστη προσέγγιση στη δοκιμή γνωστή ως Παραμετροποιημένη δοκιμή. Και οι δύο TestNG και JUnit υποστηρίζει παραμετροποιημένη δοκιμή αλλά διαφέρει στον τρόπο με τον οποίο ορίζουν την τιμή της παραμέτρου. Ας το δούμε αυτό ένα προς ένα.
Χρησιμοποιώντας JUnit4
Οι σχολιασμοί "@RunWith" και "@Parameter" χρησιμοποιούνται για την παροχή τιμής παραμέτρου για τη δοκιμή μονάδας. Ο σχολιασμός @Parameters πρέπει να επιστρέψει List[] .Αυτή η παράμετρος θα μεταβιβαστεί στον κατασκευαστή κλάσης ως όρισμα.
@RunWith(value = Parameterized.class) public class JunitTest{ privateint number; public JunitTest6(int number) { this.number = number; } @Parameters public static Collection<Object[]> data() { Object[][] data = new Object[][] { { 1 }, { 2 }, { 3 }, { 4 } }; returnArrays.asList(data); } @Test public void parameterTest() { System.out.println("Parameterized Number is : " + number); } }
Χρησιμοποιώντας TestNG
In TestNG, αρχείο XML ή "@DataProvider" χρησιμοποιείται για την παροχή μιας παραμέτρου για δοκιμή.
Εδώ ο σχολιασμός @Parameters που δηλώνεται στη μέθοδο, χρειάζεται μια παράμετρο για δοκιμή. Τα δεδομένα που χρησιμοποιούνται ως παράμετροι θα παρέχονται TestNGαρχεία διαμόρφωσης XML. Κάνοντας αυτό, μπορούμε να επαναχρησιμοποιήσουμε ένα single Δοκιμαστική θήκη με διαφορετικά σύνολα δεδομένων και μπορούμε να έχουμε διαφορετικά αποτελέσματα.
public class Test1 { @Test @Parameters(value="number") public void parameterTest(int number) { System.out.println("Parameterized Number is : " + number); } }
Δείτε παρακάτω το αρχείο xml που θα χρησιμοποιηθεί για την παραπάνω κατηγορία:
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" > <suite name="My test suite"> <test name="testing"> <parameter name="number" value="2"/> <classes> <class name="com.guru99.Test1" /> </classes> </test> </suite>
Σύνοψη
Είδαμε JUnit4 και TestNG σύγκριση σε λεπτομέρειες. Είδαμε επίσης ότι και τα δύο είναι παρόμοια εκτός από την παραμετροποιημένη δοκιμή και τη δοκιμή εξάρτησης. Εν ολίγοις, μπορούμε να πούμε, με βάση την ευελιξία και τις απαιτήσεις, μπορούμε να επιλέξουμε οποιοδήποτε από αυτά για Δοκιμή Μονάδων.