JUnit ErrorCollector @Rule με Παράδειγμα

Σε ένα κανονικό σενάριο, κάθε φορά που εντοπίζετε οποιοδήποτε σφάλμα κατά την εκτέλεση της δοκιμής, θα σταματάτε τη δοκιμή, θα διορθώνετε το σφάλμα και θα εκτελείτε ξανά τη δοκιμή.

Αλλά JUnit έχει μια ελαφρώς διαφορετική προσέγγιση. Με JUnit Συλλέκτης σφαλμάτων, μπορείτε να συνεχίσετε με την εκτέλεση της δοκιμής ακόμα και μετά την εύρεση ενός προβλήματος ή την αποτυχία της δοκιμής. Ο συλλέκτης σφαλμάτων συλλέγει όλα τα αντικείμενα σφάλματος και τα αναφέρει μόνο μία φορά μετά την ολοκλήρωση της εκτέλεσης της δοκιμής.

Γιατί να χρησιμοποιήσετε το Error Collector;

Κατά τη σύνταξη μιας δοκιμαστικής δέσμης ενεργειών, θέλετε να εκτελέσετε όλες τις δοκιμές, ακόμη και αν κάποια γραμμή κώδικα αποτύχει λόγω αποτυχίας δικτύου, αποτυχίας διεκδίκησης ή οποιουδήποτε άλλου λόγου. Σε αυτήν την περίπτωση, μπορείτε να συνεχίσετε να εκτελείτε δοκιμαστικό σενάριο χρησιμοποιώντας μια ειδική δυνατότητα που παρέχεται από JUnit γνωστός ως «συλλέκτης σφαλμάτων».

Για αυτό, JUnit χρησιμοποιεί @Σχολιασμός κανόνα που χρησιμοποιείται για τη δημιουργία ενός αντικειμένου συλλογής σφαλμάτων. Μόλις δημιουργηθεί το αντικείμενο για συλλογή σφαλμάτων, μπορείτε εύκολα να προσθέσετε όλα τα σφάλματα στο αντικείμενο χρησιμοποιώντας τη μέθοδο addError (Σφάλμα που μπορεί να πεταχτεί). Όπως γνωρίζετε, αυτό Ρίξιμο είναι η σούπερ κατηγορία του Εξαίρεση και Λάθος τάξη μέσα Java. Όταν προσθέτετε σφάλματα με αυτόν τον τρόπο, αυτά τα σφάλματα θα συνδεθούν JUnit αποτέλεσμα δοκιμής.

Το πλεονέκτημα της προσθήκης όλων των σφαλμάτων σε έναν Συλλέκτη σφαλμάτων είναι ότι μπορείτε να επαληθεύσετε όλα τα σφάλματα ταυτόχρονα. Επίσης, εάν το σενάριο αποτύχει στη μέση, μπορεί να συνεχίσει να το εκτελεί

Σημείωση: Σε περίπτωση χρήσης απλού διεκπεραιωτικού ή αποκλεισμού δοκιμής/αλίευσης, η χρήση της μεθόδου συλλογής σφαλμάτων δεν θα είναι δυνατή.

Δείγμα κώδικα

Για να κατανοήσετε περισσότερα σχετικά με το Error Collector, ανατρέξτε στο παρακάτω παράδειγμα κώδικα που δείχνει πώς να δημιουργήσετε ένα αντικείμενο Error Collector και να προσθέσετε όλα τα σφάλματα σε αυτό το αντικείμενο για να παρακολουθήσετε το πρόβλημα :

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.		
    }		
}	

Τι είναι το @Rule στο jUnit;

JUnit παρέχει ειδικό είδος χειρισμού των δοκιμών, Δοκιμαστική θήκη ή δοκιμαστική σουίτα χρησιμοποιώντας σχολιασμός @rule. Χρησιμοποιώντας το @rule, μπορείτε εύκολα να προσθέσετε ή να επαναπροσδιορίσετε τη συμπεριφορά του τεστ.

Υπάρχουν αρκετοί ενσωματωμένοι κανόνες που παρέχονται από JUnit API που μπορεί να χρησιμοποιήσει ένας δοκιμαστής ή ακόμα και εσείς μπορείτε να γράψετε τον δικό μας κανόνα.

Δείτε την παρακάτω γραμμή κώδικα, η οποία δείχνει πώς να χρησιμοποιείτε τον σχολιασμό @rule μαζί με το Error Collector:

@Rule				
public ErrorCollector collector= new ErrorCollector();

Παράδειγμα χρησιμοποιώντας το ErrorCollector

Για να κατανοήσουμε τον συλλέκτη σφαλμάτων, ας δημιουργήσουμε μια κλάση και έναν κανόνα για τη συλλογή όλων των σφαλμάτων. Θα προσθέσετε όλα τα σφάλματα χρησιμοποιώντας το addError(throughable) εδώ.

Δείτε παρακάτω τον κώδικα που δημιουργεί απλώς έναν κανόνα που δεν είναι παρά η δημιουργία "Αντικείμενο συλλογής σφαλμάτων". Το οποίο χρησιμοποιείται περαιτέρω για την προσθήκη όλων των σφαλμάτων προκειμένου να αναφερθεί το ζήτημα στο τέλος:

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());							
   }		
}      

Παραγωγή:

Δείτε το ίχνος αποτυχίας που εντοπίζει όλα τα σφάλματα σε ένα μέρος:

TestRunner.Java Παραγωγή

Οφέλη της JUnit ErrorCollector

Μπορείς να χρησιμοποιήσεις JUnit ισχυρισμός για επικύρωση λειτουργικής ή GUI π.χ

  1. assertEquals (Μήνυμα συμβολοσειράς, Αναμενόμενο αντικείμενο, Πραγματικό αντικείμενο) που συγκρίνουν ότι δύο αντικείμενα είναι ίσα.
  2. Ομοίως, το assertTrue(Boolean condition) βεβαιώνει ότι μια συνθήκη είναι αληθής.

Χρησιμοποιώντας τον ισχυρισμό, η δοκιμή επικύρωσης γίνεται εύκολη. Αλλά ένα σημαντικό ζήτημα είναι ότι η εκτέλεση της δοκιμής θα σταματήσει ακόμη και αν αποτύχει ένας μόνο ισχυρισμός.

Η συνέχεια των δοκιμών και ο χειρισμός της ανάκτησης είναι ζωτικής σημασίας για την επιτυχία του αυτοματισμού δοκιμών. Το Error Collector είναι ο καλύτερος τρόπος για να χειριστείτε τέτοιου είδους σενάρια.

Σύνοψη

  • Ο συλλέκτης σφαλμάτων Junit επιτρέπει σε μια δοκιμή να συνεχιστεί ακόμα και μετά την εύρεση του πρώτου ζητήματος και την αποτυχία της δοκιμής στο τέλος
  • Ο συλλέκτης σφαλμάτων συλλέγει όλα τα αντικείμενα σφάλματος και το αναφέρει μόνο, τελικά, την εκτέλεση της δοκιμής
  • Το πλεονέκτημα της προσθήκης όλων των σφαλμάτων σε έναν Συλλέκτη σφαλμάτων είναι ότι μπορείτε να επαληθεύσετε όλα τα σφάλματα ταυτόχρονα
  • Ο συλλέκτης σφαλμάτων απλώς προσθέτει σφάλματα χρησιμοποιώντας τη μέθοδο addError(throughable err) που παρέχεται από το ErrorCollector.java.