δημιουργώ JUnit Δοκιμαστική σουίτα με Παράδειγμα: @RunWith @SuiteClasses
⚡ Έξυπνη Σύνοψη
JUnit Οι σουίτες δοκιμών συγκεντρώνουν περιπτώσεις δοκιμών από διάφορες κλάσεις, ώστε να εκτελούνται μαζί σε ένα μόνο πέρασμα, καθοδηγούμενες από τις σχολιασμοί @RunWith(Suite.class) και @SuiteClasses και εκκινούμενες μέσω μιας συνηθισμένης κλάσης εκτέλεσης δοκιμών.

In JUnit, μια σουίτα δοκιμών μας επιτρέπει να συγκεντρώσουμε όλα περιπτώσεις δοκιμής από πολλές τάξεις σε ένα μέρος και να τις εκτελέσετε μαζί.
Για να εκτελέσετε τη δοκιμή της σουίτας, πρέπει να σχολιάσετε μια κλάση χρησιμοποιώντας τις παρακάτω σχολιασμούς:
- @RunWith(Suite.class)
- @SuiteClasses(test1.class, test2.class…) ή @Suite.SuiteClasses({test1.class, test2.class…})
Με τις παραπάνω σχολιασμοί, όλες οι κλάσεις δοκιμών στη σουίτα θα αρχίσουν να εκτελούνται μία προς μία. Η ίδια η κλάση της σουίτας παραμένει κενή: είναι μόνο μια θέση για τις σχολιασμοί και ο εκτελεστής διαβάζει αυτές τις σχολιασμοί για να αποφασίσει τι θα εκτελέσει.
Βήματα για τη δημιουργία Test Suite και Test Runner
Τα τέσσερα παρακάτω βήματα δημιουργούν τη μικρότερη σουίτα που εκτελείται στην πραγματικότητα: δύο συνηθισμένες κλάσεις δοκιμών, μια κλάση σουίτας που τις ονομάζει και ένας εκτελέστης που ξεκινά τη σουίτα από μια μέθοδο main.
Βήμα 1) Δημιουργήστε μια απλή κλάση δοκιμής (π.χ. MyFirstClassTest) και προσθέστε μια μέθοδο με σχολιασμό @Δοκιμή.
Η πρώτη κλάση περιέχει μία μόνο κενή μέθοδο δοκιμής, η οποία είναι αρκετή για να αποδείξει ότι η σουίτα την αναλαμβάνει:
Βήμα 2) Δημιουργήστε μια άλλη κλάση δοκιμής για προσθήκη (π.χ. MySecondClassTest) και δημιουργήστε μια μέθοδο με σχολιασμό @Test.
Η δεύτερη κλάση ακολουθεί ακριβώς το ίδιο σχήμα, επομένως η σουίτα έχει δύο ξεχωριστές κλάσεις για συγκέντρωση:
Βήμα 3) Για να δημιουργήσετε ένα testSuite, πρέπει πρώτα να προσθέσετε σχόλια στην κλάση με @RunWith(Suite.class) και @SuiteClasses(class1.class, class2.class…).
Παρατηρήστε ότι η κλάση suite TestSuiteExample δεν δηλώνει καμία δική της μέθοδο δοκιμής — οι δύο σχολιασμοί φέρουν όλες τις πληροφορίες:
Βήμα 4) Δημιουργήστε μια κλάση Test Runner για να εκτελέσετε τη σουίτα δοκιμών μας όπως φαίνεται παρακάτω:
Ο δρομέας είναι απλός Java κλάση με μια μέθοδο main που παραδίδει την κλάση suite σε JUnitΠυρήνας:
Code Επεξήγηση:
- Code Γραμμή 8: Δηλώνοντας την κύρια μέθοδο της κλάσης Test που θα εκτελέσει την JUnit δοκιμή.
- Code Γραμμή 9: Εκτέλεση δοκιμαστικών περιπτώσεων χρησιμοποιώντας JUnitCore.runClasses που λαμβάνει το όνομα της κλάσης δοκιμής ως παράμετρο (Στο παραπάνω παράδειγμα, χρησιμοποιείτε το TestSuiteExample.class που φαίνεται στο βήμα 3).
- Code Γραμμή 11: Επεξεργασία του αποτελέσματος χρησιμοποιώντας έναν βρόχο for και εκτύπωση του αποτυχημένου αποτελέσματος.
- Code Γραμμή 13: Εκτύπωση του επιτυχημένου αποτελέσματος.
Παραγωγή: Εδώ είναι το αποτέλεσμα που δείχνει μια επιτυχημένη δοκιμή χωρίς αποτυχία tracε όπως αναφέρεται παρακάτω:
Η πράσινη γραμμή επιβεβαιώνει τον σκοπό μιας σουίτας: μία εκκίνηση, μία προβολή αποτελέσματος και αναφορά και των δύο κλάσεων κάτω από τον κόμβο της σουίτας αντί για δύο ξεχωριστές εκτελέσεις.
JUnit Παράδειγμα δοκιμαστικής σουίτας
Σκεφτείτε ένα πιο σύνθετο παράδειγμα, στο οποίο οι κλάσεις μέσα στη σουίτα στην πραγματικότητα διεκδικώ κάτι αντί να κρατάει μια κενή μέθοδο.
JunitTest.java
Το JunitTest.java είναι μια απλή κλάση με σχόλια @RunWith και @Σουίτα σχολιασμοί. Μπορείτε να καταχωρίσετε οποιονδήποτε αριθμό κλάσεων στη σουίτα ως παραμέτρους, όπως δίνεται παρακάτω:
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 είναι μια κλάση δοκιμών που έχει μεθόδους δοκιμών που εκτυπώνουν ένα μήνυμα, όπως δίνεται παρακάτω. Θα χρησιμοποιήσετε αυτήν την κλάση ως μέλος της σουίτας στην κλάση που αναφέρθηκε παραπάνω. Βασίζεται σε μια βοηθητική κλάση με όνομα JUnitΜήνυμα, το οποίο ορίζεται αλλού στο ίδιο πακέτο και δεν αναπαράγεται εδώ.
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 είναι μια άλλη κατηγορία δοκιμών, παρόμοια με SuiteTest1.java, έχοντας μια δοκιμαστική μέθοδο για την εκτύπωση ενός μηνύματος όπως δίνεται παρακάτω. Θα χρησιμοποιήσετε αυτήν την κλάση ως μέλος της σουίτας στο 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); } }
Παραγωγή
Μετά την εκτέλεση JunitTest.java, το οποίο περιέχει μια σουίτα που περιέχει SuiteTest1.java και SuiteTest2.java, θα λάβετε την παρακάτω έξοδο. Η κονσόλα εκτυπώνει τα μηνύματα που παράγονται και από τις δύο κλάσεις:
The JUnit Η προβολή καταγράφει την ίδια εκτέλεση με τρεις μεθόδους επιτυχούς δοκιμής ομαδοποιημένες στην κλάση suite:
Σημείωση: Οι ετικέτες κονσόλας σε αυτό το παράδειγμα είναι διασταυρωμένες — η συμβολοσειρά που εκτυπώνεται από το SuiteTest1 αναφέρει "Suite Test 2" και αυτή που εκτυπώνεται από το SuiteTest2 αναφέρει "Suite Test 1". Οι αρχικές καταχωρίσεις αναπαράγονται αμετάβλητες, επομένως οι ετικέτες παραμένουν όπως τις έγραψε ο συγγραφέας. Διαβάστε το όνομα της κλάσης στο JUnit προβολή αντί για την εκτυπωμένη ετικέτα όταν αντιστοιχίζετε την έξοδο με την πηγή.
Πώς να δημιουργήσετε μια σουίτα δοκιμών στο JUnit 5
JUnit Το 5 αφαιρεί εντελώς τους runners, επομένως το @RunWith(Suite.class) δεν υπάρχει στα πακέτα org.junit.jupiter. Οι σουίτες μετακινήθηκαν στο JUnit Πλατφόρμα, η οποία τα αποστέλλει σε ξεχωριστό τεχνούργημα που ονομάζεται junit-platform-suite-engineΠροσθέστε αυτήν την εξάρτηση και, στη συνέχεια, σχολιάστε μια κλάση με @Suite και μία από τις σχολιασμούς του επιλογέα.
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 }
Οι σχολιασμοί του επιλογέα αντικαθιστούν τη μοναδική λίστα @SuiteClasses με μια μικρή οικογένεια επιλογών:
| Σχόλιο | Τι επιλέγει |
| @ΕπιλέξτεΤάξεις | Μεμονωμένες κλάσεις δοκιμών που ονομάζονται μία προς μία, η άμεση αντικατάσταση του @SuiteClasses. |
| @ΕπιλέξτεΠακέτα | Κάθε κλάση δοκιμής στο πακέτο με όνομα και σε όλα τα υποπακέτα του. |
| @IncludeClassNamePatterns | Ένα φίλτρο κανονικής έκφρασης εφαρμόστηκε πάνω από την επιλογή. |
| @SuiteDisplayName | Ένα ευανάγνωστο όνομα που εμφανίζεται στην αναφορά αντί για το όνομα της κλάσης. |
Δύο ακόμη διαφορές έχουν σημασία στην πράξη. A JUnit Η κλάση 5 suite μπορεί να δηλώσει τις μεθόδους @BeforeSuite και @AfterSuite, οι οποίες εκτελούνται μία φορά σε ολόκληρη τη σουίτα, και η JUnit Το παραπάνω παράδειγμα 4 εξακολουθεί να εκτελείται στο JUnit Πλατφόρμα μέσω της μηχανής vintage, επομένως ο αρχικός κώδικας σε αυτήν τη σελίδα δεν χρειάζεται να ξαναγραφεί για να συνεχίσει να λειτουργεί.
Πλεονεκτήματα και περιορισμοί του JUnit Δοκιμαστικές Σουίτες
Μια σουίτα είναι μια ομάδαping μηχανισμός, όχι ένας πλαίσιο δοκιμών από μόνο του, και αυτό διαμορφώνει τόσο το τι κάνει καλά όσο και τα σημεία σταματώντας να είναι χρήσιμο.
Πλεονεκτήματα
- Μία εκτόξευση τρέχει μαζί σχετικές κλάσεις, άρα ένα σετ καπνού ή ένα οπισθοδρόμηση Το set ξεκινά με μία μόνο εντολή.
- Η προβολή αποτελεσμάτων ομαδοποιεί κάθε κλάση κάτω από έναν κόμβο σουίτας, γεγονός που διευκολύνει τον εντοπισμό μιας κοινόχρηστης αποτυχίας.
- Η λίστα μελών βρίσκεται σε κώδικα, επομένως ελέγχεται και τροποποιείται όπως οποιοδήποτε άλλο αρχείο πηγαίου κώδικα.
- Η ίδια κλάση suite μπορεί να ξεκινήσει από ένα IDE, από έναν runner όπως JUnitCore ή από ένα εργαλείο δημιουργίας.
Περιορισμοί
- Το @SuiteClasses είναι μια λίστα με σκληρό κώδικα, επομένως μια νέα δοκιμαστική κλάση παραλείπεται σιωπηλά μέχρι κάποιος να επεξεργαστεί τη σουίτα.
- Η σουίτα δεν παρέχει καμία εγγύηση παραγγελίας πέραν της σειράς με την οποία παρατίθενται οι κατηγορίες.
- Τίποτα δεν μοιράζεται μεταξύ των κλάσεων-μελών, επομένως μια σουίτα δεν υποκαθιστά μια κλάση fixture ή μια βασική.
- Τα εργαλεία δημιουργίας ανακαλύπτουν ήδη κλάσεις δοκιμών μέσω της σύμβασης ονομασίας, γεγονός που καθιστά μια σουίτα περιττή σε πολλά έργα.
Συνηθισμένα λάθη κατά τη δημιουργία ενός JUnit Δοκιμαστική Σουίτα
Τα περισσότερα προβλήματα της σουίτας παράγουν ένα σύντομο, άχρηστο μήνυμα. Ο πίνακας αντιστοιχίζει τα μηνύματα που είναι πιθανό να συναντήσετε με την αιτία και την επίλυσή τους.
| Μήνυμα ή σύμπτωμα | Αιτία | σταθερός |
| initializationError: Δεν υπάρχουν εκτελέσιμες μέθοδοι | Η κλάση εκτελείται ως μια συνηθισμένη δοκιμαστική κλάση, αλλά περιέχει μόνο σχολιασμούς. | Προσθέστε την συνάρτηση @RunWith(Suite.class) έτσι ώστε ο εκτελέστης της σουίτας να αναλάβει αντί για τον προεπιλεγμένο εκτελέστη. |
| Δεν είναι δυνατή η εύρεση του συμβόλου: κλάση Suite | Η εισαγωγή του Suite λείπει. | Εισαγάγετε το org.junit.runners.Suite παράλληλα με το org.junit.runner.RunWith. |
| Η σουίτα λειτουργεί, αλλά παραλείπεται ένα μάθημα | Η τάξη δεν προστέθηκε ποτέ στη λίστα @SuiteClasses. | Προσθέστε την κλάση ρητά ή μετακινηθείτε στο @SelectPackages στο JUnit 5. |
| Το όνομα της κλάσης δεν γίνεται αποδεκτό από τον μεταγλωττιστή | Το @Runwith ή το @suiteClasses πληκτρολογήθηκαν με λάθος κεφαλαία γράμματα. | Java Οι σχολιασμοί κάνουν διάκριση πεζών-κεφαλαίων: γράψτε τα @RunWith και @SuiteClasses ακριβώς. |
| Οι δοκιμές στην ίδια την τάξη σουίτας δεν εκτελούνται ποτέ | Μια μέθοδος @Test προστέθηκε στον κάτοχο της σουίτας. | Κρατήστε την υποδοχή κενή και μετακινήστε τη μέθοδο δοκιμής σε μια κλάση-μέλος. |
Γράφοντας τη σουίτα μία φορά και διατηρώνταςping είναι η πραγματική δουλειά. Εάν η λίστα αποκλίνει από τις κλάσεις στο δίσκο, η σουίτα αναφέρει πράσινο ενώ μέρος του δοκιμή μονάδας Το set δεν εκτελείται ποτέ, μία από τις πιο αθόρυβες λειτουργίες αστοχίας στο δοκιμές λογισμικού.







