JUnit ErrorCollector @Rule με Παράδειγμα
⚡ Έξυπνη Σύνοψη
JUnit Το ErrorCollector είναι ένας κανόνας που επιτρέπει σε μια δοκιμή να συνεχίζει να εκτελείται μετά από μια αποτυχία, συλλέγοντας κάθε αντικείμενο σφάλματος και αναφέροντάς τα μαζί μόλις ολοκληρωθεί η μέθοδος δοκιμής αντί να σταματήσει.ping στο πρώτο πρόβλημα.
Σε ένα κανονικό σενάριο, κάθε φορά που εντοπίζετε οποιοδήποτε σφάλμα κατά την εκτέλεση της δοκιμής, θα σταματάτε τη δοκιμή, θα διορθώνετε το σφάλμα και θα εκτελείτε ξανά τη δοκιμή.
Αλλά JUnit έχει μια ελαφρώς διαφορετική προσέγγιση. Με το JUnit Με τον συλλέκτη σφαλμάτων, μπορείτε να συνεχίσετε την εκτέλεση της δοκιμής ακόμα και μετά τον εντοπισμό ενός προβλήματος ή την αποτυχία της δοκιμής. Ο συλλέκτης σφαλμάτων συλλέγει όλα τα αντικείμενα σφάλματος και τα αναφέρει μόνο μία φορά, μετά το τέλος της εκτέλεσης της δοκιμής.
Γιατί να χρησιμοποιήσετε το Error Collector;
Κατά τη σύνταξη ενός σεναρίου δοκιμής, θέλετε να εκτελέσετε όλες τις δοκιμές ακόμα και αν κάποια γραμμή κώδικα αποτύχει λόγω σφάλματος δικτύου, σφάλματος διεκδίκησης ή οποιουδήποτε άλλου λόγου. Σε αυτήν την περίπτωση, μπορείτε να συνεχίσετε να εκτελείτε το σενάριο δοκιμής χρησιμοποιώντας μια ειδική λειτουργία που παρέχεται από JUnit γνωστός ως «συλλέκτης σφαλμάτων».
Για αυτό, JUnit χρησιμοποιεί το @Σχολιασμός κανόνα, το οποίο χρησιμοποιείται για τη δημιουργία ενός αντικειμένου του συλλέκτη σφαλμάτων. Μόλις δημιουργηθεί το αντικείμενο για τον συλλέκτη σφαλμάτων, μπορείτε εύκολα να προσθέσετε όλα τα σφάλματα στο αντικείμενο χρησιμοποιώντας τη μέθοδο addError (Σφάλμα που μπορεί να πεταχτεί). Οπως ξέρεις, Ρίξιμο είναι η υπερ-κλάση του Εξαίρεση και Λάθος μαθήματα σε JavaΌταν προσθέτετε σφάλματα με αυτόν τον τρόπο, αυτά τα σφάλματα θα καταγράφονται στο JUnit αποτέλεσμα της δοκιμής.
Το πλεονέκτημα της προσθήκης όλων των σφαλμάτων σε έναν Συλλέκτη σφαλμάτων είναι ότι μπορείτε να επαληθεύσετε όλα τα σφάλματα ταυτόχρονα. Επίσης, εάν το σενάριο αποτύχει στη μέση, η εκτέλεση συνεχίζεται μέχρι το τέλος της μεθόδου δοκιμής.
ΣημείωσηΣτην περίπτωση χρήσης ενός απλού assert ή ενός μπλοκ try/catch, η χρήση της μεθόδου συλλέκτη σφαλμάτων δεν θα είναι δυνατή.
Δείγμα κώδικα
Για να κατανοήσετε περισσότερα σχετικά με το Error Collector, ανατρέξτε στο παρακάτω παράδειγμα κώδικα, το οποίο δείχνει πώς να δημιουργήσετε ένα αντικείμενο Error Collector και να προσθέσετε όλα τα σφάλματα σε αυτό το αντικείμενο για να tracκ το ζήτημα:
package guru99.junit; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ErrorCollector; public class ErrorCollectorExample { @Rule public ErrorCollector collector = new ErrorCollector(); @Test public void example() { collector.addError(new Throwable("There is an error in first line")); collector.addError(new Throwable("There is an error in second line")); collector.checkThat(getResults(), not(containsString("here is an error"))); // all lines of code will execute and at the end a combined failure will be logged in. } }
Σημείωση: αυτό είναι ένα ενδεικτικό παράδειγμαtract, δεν είναι ένα αρχείο που μπορεί να μεταγλωττιστεί. Το τελικό σχόλιό του αναδιπλώνεται σε μια δεύτερη γραμμή χωρίς // στην αρχή, και η συνάρτηση getResults() συν τα ταιριάσματα Hamcrest δεν εμφανίζονται. Η πλήρης εκτελούμενη έκδοση ακολουθεί παρακάτω. Παράδειγμα χρησιμοποιώντας το ErrorCollector.
Τι είναι το @Rule στο JUnit?
JUnit παρέχει ένα ειδικό είδος χειρισμού των δοκιμών, Δοκιμαστική θήκη ή σουίτα δοκιμών χρησιμοποιώντας το @Σχολιασμός κανόναΧρησιμοποιώντας το @Rule, μπορείτε εύκολα να προσθέσετε ή να επαναπροσδιορίσετε τη συμπεριφορά της δοκιμής.
Υπάρχουν αρκετοί ενσωματωμένοι κανόνες που παρέχονται από το JUnit API που μπορεί να χρησιμοποιήσει ένας δοκιμαστής και μπορείτε επίσης να γράψετε τον δικό σας κανόνα. Ένα πεδίο κανόνα πρέπει να είναι δημόσιο, μη στατικό και να είναι τύπου που να υλοποιεί το TestRule.
Δείτε την παρακάτω γραμμή κώδικα, η οποία δείχνει πώς να χρησιμοποιήσετε την σχολίαση @Rule μαζί με τον Συλλέκτη Σφάλματος:
@Rule public ErrorCollector collector= new ErrorCollector();
JUnit Σημείωση 5: Ο Jupiter αντικατέστησε τους κανόνες με το Extension API, επομένως τα @Rule και ErrorCollector δεν υπάρχουν στο org.junit.jupiter. Τα πλησιέστερα ισοδύναμα είναι τα Assertions.assertAll() και AssertJ SoftAssertions. JUnit Ο κώδικας 4 που φαίνεται εδώ εξακολουθεί να εκτελείται μέσω της vintage μηχανής. Δείτε το JUnit σχολιασμούς εκπαιδευτικό βοήθημα για τον πλήρη χάρτηping.
Παράδειγμα χρησιμοποιώντας το ErrorCollector
Για να κατανοήσουμε τον συλλέκτη σφαλμάτων, ας δημιουργήσουμε μια κλάση και έναν κανόνα για να συλλέξουμε όλα τα σφάλματα. Θα προσθέσετε όλα τα σφάλματα χρησιμοποιώντας την addError(throwable) εδώ.
Δείτε τον παρακάτω κώδικα, ο οποίος απλώς δημιουργεί έναν κανόνα που δεν είναι τίποτα άλλο παρά ένα "αντικείμενο Error Collector". Χρησιμοποιείται περαιτέρω για την προσθήκη όλων των σφαλμάτων προκειμένου να αναφερθεί το πρόβλημα στο τέλος:
ErrorCollectorExample.java
package guru99.junit; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ErrorCollector; public class ErrorCollectorExample { @Rule public ErrorCollector collector = new ErrorCollector(); @Test public void example() { collector.addError(new Throwable("There is an error in first line")); collector.addError(new Throwable("There is an error in second line")); System.out.println("Hello"); try { Assert.assertTrue("A " == "B"); } catch (Throwable t) { collector.addError(t); } System.out.println("World!!!!"); } }
TestRunner.java
Ας προσθέσουμε την παραπάνω κλάση δοκιμής σε έναν εκτελέστη δοκιμής και ας την εκτελέσουμε για να συλλέξουμε όλα τα σφάλματα. Δείτε τον παρακάτω κώδικα:
package guru99.junit; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(ErrorCollectorExample.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
Παραγωγή:
Δείτε την αποτυχία tracε, το οποίο tracόλα τα σφάλματα σε ένα μέρος. JUnit Η προβολή μετράει μία εκτέλεση αλλά αναφέρει δύο σφάλματα και μία αποτυχία, το καθένα με τον δικό του αριθμό γραμμής:
Οφέλη της JUnit ErrorCollector
Μπορείτε να χρησιμοποιήσετε ένα JUnit ισχυρισμός για λειτουργική ή GUI επικύρωση, για παράδειγμα:
- assertEquals(Μήνυμα συμβολοσειράς, Αναμενόμενο αντικείμενο, Πραγματικό αντικείμενο), το οποίο συγκρίνει ότι δύο αντικείμενα είναι ίσα.
- Ομοίως, το assertTrue(Boolean condition) βεβαιώνει ότι μια συνθήκη είναι αληθής.
Χρησιμοποιώντας ισχυρισμούς, οι δοκιμές επικύρωσης γίνονται εύκολες. Αλλά ένα σημαντικό ζήτημα είναι ότι η εκτέλεση των δοκιμών θα σταματήσει ακόμη και αν αποτύχει ένας μόνο ισχυρισμός.
Η συνέχεια των δοκιμών και ο χειρισμός της ανάκτησης είναι ζωτικής σημασίας για την επιτυχία του αυτοματισμού των δοκιμών και έχουν τη μεγαλύτερη σημασία σε μακροπρόθεσμες Selenium ροές όπου η επανεκκίνηση ενός προγράμματος περιήγησης μετά από κάθε αποτυχημένο έλεγχο είναι δαπανηρή. Το Error Collector είναι ο καλύτερος τρόπος για την αντιμετώπιση τέτοιων σεναρίων.

