junit test execution order
Αυτό το σεμινάριο εξηγεί τον τρόπο ορισμού της εντολής εκτέλεσης για περιπτώσεις δοκιμών JUnit. Θα μάθετε για σχολιασμούς και τάξεις για να ορίσετε την εντολή εκτέλεσης δοκιμής JUnit σε JUnit 4 εναντίον JUnit 5:
Μάθαμε πώς να δημιουργήσουμε μια δοκιμαστική σουίτα, πώς να προσθέσουμε μια κατηγορία ή μια ετικέτα στις δοκιμαστικές θήκες και πώς να φιλτράρουμε τις δοκιμές (εξαίρεση ή να συμπεριλάβουμε τις δοκιμαστικές περιπτώσεις) με βάση την κατηγορία ή την ετικέτα στο προηγούμενο σεμινάριό μας.
Εκτός αυτού, μάθαμε ότι στην JUnit 4, έχουμε @Category, @IncludeCategory, και @ExcludeCategory για φιλτράρισμα των δοκιμαστικών περιπτώσεων ενώ το JUnit 5 έχει @IncludeTags και @ExcludeTags να κάνει το ίδιο.
Το JUnit 5 έχει πρόσθετες επιλογές φιλτραρίσματος χρησιμοποιώντας σχολιασμούς @IncludePackages, @ExcludePackages, και επίσης σχολιασμούς για συμπερίληψη ή εξαίρεση τάξεων χρησιμοποιώντας μοτίβα ονομάτων τάξης.
=> Δείτε εδώ για να δείτε A-Z Of JUnit Training Tutorials .
Τι θα μάθετε:
Εντολή εκτέλεσης δοκιμής JUnit
Σε αυτό το σεμινάριο, θα μάθουμε πώς να ορίζουμε μια παραγγελία για κάθε δοκιμαστική περίπτωση ώστε να εκτελούνται με τη σειρά. Θα μάθουμε πώς να παραγγέλνουμε δοκιμές στο JUnit 4 καθώς και στο JUnit 5.
Οι μέθοδοι δοκιμής δεν ακολουθούν μια συγκεκριμένη παραγγελία από προεπιλογή.Οι δοκιμαστικές περιπτώσεις δεν χρειάζεται απαραίτητα να εκτελεστούν με τη σειρά με την οποία έχουν γραφτεί.
Υπάρχουν διαφορετικοί τρόποι ή τρόποι για να ορίσετε τη σειρά εκτέλεσης για τις δοκιμαστικές περιπτώσεις. Θα εμβαθύνουμε επίσης στο πώς διαφέρει το JUnit 4 στην παραγγελία των δοκιμαστικών περιπτώσεων σε σύγκριση με το JUnit 5.
JUnit 4: @FixedMethodOrder, Class MethodSorters
Ξεκινώντας από το JUnit 4.11, έχουμε τον σχολιασμό @FixMethodOrder και MethodSorters.class υποστηρίζοντας τη δυνατότητα καθορισμού μιας παραγγελίας για την εκτέλεση ενός τεστ.
Το πακέτο org.junit.runners. * πρέπει να εισαχθεί για να συμπεριλάβει την τάξη Μέθοδος ταξινομητές . Αυτή η τάξη αποφασίζει πώς πρέπει να ταξινομηθούν οι δοκιμαστικές περιπτώσεις. Μέθοδος ταξινομητές έχω τρία απαρίθμηση αξίες.
Παρακάτω δίνονται οι τιμές enum της κλάσης μαζί με το σκοπό που κάθε τιμή εξυπηρετεί:
MethodSorters.DEFAULT | Αυτή η τιμή enum ταξινομεί την εκτέλεση δοκιμής με συγκεκριμένη σειρά. Ωστόσο, δεν είναι ποτέ προβλέψιμο σε ποια σειρά θα μπορούσε να εκτελέσει τις δοκιμαστικές περιπτώσεις. |
Γι 'αυτό, έχετε τον έλεγχο της απόφασής σας σχετικά με το ποια δοκιμασία πρέπει να τρέξει πρώτα και ποια θα ακολουθήσει στη συνέχεια. | |
Έχω παρατηρήσει ότι μια τάξη με πολλαπλές μεθόδους ταξινομημένες με DEFAULT enum όταν εκτελείται, η παραγγελία παραμένει η ίδια κάθε φορά κατά τη διάρκεια της εκτέλεσης της δοκιμής. | |
Ωστόσο, δεν υπάρχει τρόπος να προβλέψω ή να καταλάβω τον τρόπο με τον οποίο τέθηκε η παραγγελία. | |
MethodSorters.JVM | Η σειρά της εκτέλεσης δοκιμής με JVM enum είναι όπως υποδηλώνει το όνομα καθορίζεται από το JVM. |
Σε αυτήν την περίπτωση, κάθε φορά που εκτελείτε την τάξη, οι δοκιμές θα εκτελούνται όχι με την ίδια αλλά με τυχαία σειρά. | |
Με άλλα λόγια, η σειρά των δοκιμών αλλάζει κατά τη διάρκεια κάθε εκτέλεσης. | |
MethodSorters.NAME_ASCENDING | Αυτό το enum ταξινομεί τις μεθόδους δοκιμής με λεξικογραφική σειρά του ονόματος της μεθόδου. Ως εκ τούτου, μπορεί να είστε σίγουροι, καθώς αυτός είναι ο πιο προβλέψιμος τρόπος για να διατάξετε την εκτέλεση της δοκιμής σας. |
Επομένως, μπορείτε να αποφασίσετε εκ των προτέρων τη σειρά των δοκιμών με βάση τη λεξικογραφική σειρά του ονόματός της που ορίσατε. |
Ο σχολιασμός @FixedMethodOrder παίρνει την παράμετρο εισόδου του Μέθοδος ταξινομητές με την αξία του. Το πακέτο που απαιτείται για τον σχολιασμό είναι org.junit.FixedMethodOrder.
Ας δούμε πώς εφαρμόζεται μέσω του κώδικα.
Εφαρμογή κώδικα για MethodSorters.DEFAULT
Ας δημιουργήσουμε ένα αρχείο κλάσης JUnit ' Junit4TestOrder.java ' όπου θα χρησιμοποιήσουμε MethodSorters.DEFAULT
Ο κωδικός για το Junit4TestOrder.java
@FixMethodOrder(MethodSorters.DEFAULT) public class JUnit4TestOrder { @Test public void Testcase_3() { System.out.println('Testcase_3 executes'); } @Test public void Testcase_1() { System.out.println('Testcase_1 executes'); } @Test public void Testcase_2() { System.out.println('Testcase_2 executes '); } }
Εκτελούμε την τάξη τρεις φορές και βλέπουμε την ίδια σειρά δοκιμών να εκτελούνται όπως παρακάτω, ωστόσο, οι δοκιμαστικές περιπτώσεις μπορεί ή όχι να εκτελεστούν με την ταξινομημένη σειρά.
Το παράθυρο της κονσόλας παρουσίασε τα αποτελέσματα όπως παρακάτω - η σειρά εκτέλεσης δοκιμής είναι TestCase_3, TestCase_1 και TestCase_2 και η σειρά δεν αλλάζει με τον αριθμό των εκτελέσεων.
Υλοποίηση κώδικα για MethodSorters. JVM
Τώρα θα ενημερώσουμε το 'Junit4TestOrder.java' για να έχουμε MethodSorters.JVM
Το απόσπασμα κώδικα για το Junit4TestOrder.java
@FixMethodOrder(MethodSorters . JVM ) public class JUnit4TestOrder {
Εκτελούμε την τάξη δύο φορές και η σειρά εκτέλεσης των δοκιμών αλλάζει με κάθε εκτέλεση.
Το παράθυρο της κονσόλας για το πρώτα η εκτέλεση είναι όπως φαίνεται παρακάτω:
Το παράθυρο της κονσόλας για το δεύτερος η εκτέλεση είναι όπως φαίνεται παρακάτω:
Παρατηρήστε προσεκτικά την αλλαγή στη σειρά με την οποία εκτελούνται οι δοκιμές και στις δύο διαδρομές. Η σειρά των δοκιμών στις δύο δοκιμές διέφερε.
Εφαρμογή κώδικα για MethodSorters.NAME_ASCENDING
Τώρα θα ενημερώσουμε το 'Junit4TestOrder.java' για να έχουμε MethodSorters.NAME_ASCENDING
Το απόσπασμα κώδικα για το Junit4TestOrder.java
@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class JUnit4TestOrder {
Εκτελούμε την τάξη δύο φορές, η σειρά των δοκιμών που εκτελούνται παραμένει η ίδια και εκτελείται σύμφωνα με την αύξουσα σειρά του ονόματος της μεθόδου.
Το παράθυρο της κονσόλας δείχνει το αποτέλεσμα των δοκιμών που εκτελούνται με τη σειρά TestCase_1, TestCase_2 και TestCase_3.
JUnit 5: @TestMethodOrder, @Order, Interface MethodOrderer
Για τον έλεγχο της σειράς εκτέλεσης των δοκιμών, οι παρακάτω οντότητες βοηθούν να κάνουν το ίδιο:
- Ο σχολιασμός @TestMethodOrder
- Ο σχολιασμός @Order
- Οι κλάσεις που ανήκουν στις διεπαφές MethodOrderer
Οι ενσωματωμένες κλάσεις MethodOrderer και οι λεπτομέρειες τους είναι οι εξής:
MethodOrderer ενσωματωμένο στην τάξη | Από το πακέτο | Λεπτομέριες |
---|---|---|
Αλφαριθμητικός | org.junit.jupiter.api.MethodOrderer.Alphanumeric | Ταξινόμηση μεθόδων δοκιμής αλφαριθμητικά με βάση τα ονόματά τους |
Παραγγελία Σχολιασμός | org.junit.jupiter.api.MethodOrderer.OrderAnnotation | Ταξινόμηση μεθόδων δοκιμής αριθμητικά με βάση τις τιμές που έχουν μεταφερθεί στον σχολιασμό @Order |
Τυχαίος | org.junit.jupiter.api.MethodOrderer.Random | Ταξινόμηση μεθόδων δοκιμής τυχαία όπως στην περίπτωση MethodSorters.JVM στο JUnit 4 |
Ας δούμε τώρα την επίδειξη καθεμιάς από αυτές τις στρατηγικές παραγγελίας:
Εφαρμογή κώδικα για το Alphanumeric.class
Ας δημιουργήσουμε ένα αρχείο κατηγορίας JUnit 5 με το όνομα JUnit5TestOrder.java ίδιο με το JUnit4TestOrder.java και ας χρησιμοποιήσουμε τον σχολιασμό με το Alphanumeric.class για να ταξινομήσουμε τις δοκιμές αλφαριθμητικά.
Ο κωδικός για Junit5TestOrder.java
@TestMethodOrder(Alphanumeric.class) public class JUnit5TestOrder { @Test public void Testcase_3() { System.out.println('Testcase_3 executes'); } @Test public void Testcase_1() { System.out.println('Testcase_1 executes'); } @Test public void Testcase_2() { System.out.println('Testcase_2 executes '); } }
Εκτελέσαμε την τάξη τρεις φορές και εξακολουθούμε να βλέπουμε την ίδια σειρά δοκιμών να εκτελούνται με την αλφαριθμητική σειρά του ονόματος της μεθόδου δοκιμής.
Μετά την εκτέλεση του αρχείου τάξης, η σειρά της εκτέλεσης δοκιμής:
- Testcase_1,
- Testcase_2 και
- Testcase_3
Σημείωση: Η αλφαριθμητική στρατηγική ταξινόμησης είναι πεζά οπότε σε περίπτωση που είχαμε μια άλλη δοκιμαστική υπόθεση με το όνομα testcase_1.
Η σειρά εκτέλεσης θα ήταν:
- Testcase_1,
- Testcase_2,
- Testcase_3,
- testcase_1.
Επομένως, η κεφαλαία προτεραιότητα έναντι των πεζών ονομάτων μεθόδου.
Εφαρμογή κώδικα για Random.class
Θα ενημερώσουμε τώρα την κλάση JUnit 5 JUnit5TestOrder.java για να χρησιμοποιήσουμε τον σχολιασμό με το Random.class
Το απόσπασμα κώδικα για το Junit5TestOrder.java
@TestMethodOrder (Random.class) public class JUnit5TestOrder {
Τρέξαμε το μάθημα δύο φορές και το είδαμε ότι κάθε φορά, τρέχαμε την τάξη, η σειρά εκτέλεσης της δοκιμής διατάχθηκε τυχαία.
Μετά την εκτέλεση του αρχείου τάξης για το πρώτη φορά , η σειρά εκτέλεσης δοκιμής ήταν:
- Testcase_2,
- Testcase_1
- Testcase_3
Η σειρά εκτέλεσης όταν εκτελέστηκε για το δεύτερος ο χρόνος έδειξε:
- Testcase_2,
- Testcase_3
- Testcase_1 .
Εφαρμογή κώδικα για το OrderAnnotation.class
Τώρα θα ενημερώσουμε το JUnit 5 class JUnit5TestOrder.java για να χρησιμοποιήσουμε τον σχολιασμό με OrderAnnotation.class. Ο σχολιασμός @Σειρά θα διαδραματίσει επίσης σημαντικό ρόλο στη ρύθμιση προτεραιότητας των μεθόδων δοκιμής εδώ.
Το απόσπασμα κώδικα για το Junit5TestOrder.java
@TestMethodOrder(OrderAnnotation.class) public class JUnit5TestOrder { @Test @Order(1) public void Testcase_3() { System.out.println('Testcase_3 executes'); } @Test @Order(2) public void Testcase_1() { System.out.println('Testcase_1 executes'); } @Test @Order(3) public void Testcase_2() { System.out.println('Testcase_2 executes '); } }
Έτσι, σε αυτήν τη στρατηγική ρύθμισης της παραγγελίας για εκτέλεση δοκιμής, ο σχολιασμός @Order επιβάλλει τις μεθόδους δοκιμής που θα εκτελεστούν ανά αξία παραγγελίας είναι έτοιμο για αυτό.
Όσο χαμηλότερη είναι η τιμή του @Order για μια μέθοδο δοκιμής, τόσο υψηλότερη είναι η προτεραιότητά του κατά την εκτέλεση.
Μετά την εκτέλεση, η σειρά των δοκιμών εκτελέστηκε ως εξής:
- Testcase_3,
- Testcase_1
- Testcase_2, επειδή η σειρά για τις δοκιμαστικές περιπτώσεις είναι 1,2 και 3, αντίστοιχα.
Γι 'αυτό δεν έχει σημασία αν οι δοκιμαστικές θήκες είναι γραμμένες με τη σειρά. Εκτός αυτού, δεν έχει σημασία αν τα ονόματα της μεθόδου είναι ή δεν είναι αλφαριθμητικά.
JUnit 5: Δημιουργία προσαρμοσμένης παραγγελίας
Εκτός αυτού, οι ενσωματωμένες τάξεις παραγγελιών, το JUnit 5 υποστηρίζει επίσης προσαρμοσμένες παραγγελίες εφαρμόζοντας τη διεπαφή Μέθοδος Παραγγελία . Ξεκινώντας από την έκδοση 5.4 του JUnit 5, υποστηρίζεται το προσαρμοσμένο είδος.
Ας δούμε γρήγορα πώς να δημιουργήσουμε και να εφαρμόσουμε μια προσαρμοσμένη παραγγελία κατά μήκος μεθόδου.
Βήμα 1: Δημιούργησε μια προσαρμοσμένη τάξη παραγγελίας που εφαρμόζει τη διεπαφή MethodOrderer και ονόμασε την τάξη ως TestCaseLengthOrder
Ο κωδικός για TestCaseLengthOrder.java
public class TestCaseLengthOrder implements MethodOrderer { @Override public void orderMethods(MethodOrdererContext context) { MethodDescriptor md1; MethodDescriptor md2; context.getMethodDescriptors().sort((md1, md2)-> md1.getMethod().getName().length().compareTo(md2.getMethod().getName().length())); } }
Επεξήγηση κωδικού TestCaseLengthOrder:
- Δημιουργείται μια τάξη προσαρμοσμένης παραγγελίας εφαρμόζοντας τη διεπαφή MethodOrderer.
- void orderMethods (MethodOrderContext konteks) {} μέθοδος που είναι η ενσωματωμένη μέθοδος που εφαρμόζεται από το Interface MethodOrderer. Εδώ είναι που ορίζετε την εφαρμογή της λογικής δοκιμαστικής παραγγελίας.
- MethodDescriptor είναι μια διεπαφή που περικλείει λεπτομέρειες σχετικά με μια μέθοδο:
- Η μέθοδος MethodDescriptor.getMethod () παίρνει το όνομα μεθόδου για αυτόν τον περιγραφέα.
- Το όνομα της μεθόδου μετατρέπεται σε συμβολοσειρά με τη μέθοδο getName () δηλ. MethodDescriptor.getMethod (). GetName () και
- Το μήκος της μεθόδου () ανακτά το μήκος της μεθόδου (όπως ακριβώς το string.length () παίρνει το μήκος μιας τιμής συμβολοσειράς).
- Όλα τα ονόματα μεθόδων συγκρίνονται μεταξύ τους χρησιμοποιώντας τη μέθοδο σύγκρισηςTo ().
- Η μέθοδος getMethodDescriptors () λαμβάνει τη λίστα όλων των περιγραφικών μεθόδων σε μια κλάση.
- Η μέθοδος sort () ταξινομεί τα αντικείμενα MethodDescriptor.
Τώρα, που έχουμε κατανοήσει με σαφήνεια κάθε API του MethodOrderer, ελπίζουμε ότι είναι εύκολο να ερμηνεύσουμε τον παραπάνω κώδικα.
Βήμα 2 : Χρησιμοποιήστε την τάξη προσαρμοσμένης παραγγελίας όπως χρησιμοποιείτε οποιαδήποτε ενσωματωμένη σειρά στην τάξη δοκιμής.
Ως είσοδος στον σχολιασμό @TestMethodOrder.
Ο κωδικός για JUnit_CustomOrder.java
@TestMethodOrder(TestCaseLengthOrder.class) class JUnit_CustomOrder{ @Test public void subt(){ } @Test public void add(){ } @Test public void multiply(){ } @Test public void divide(){ }
Βήμα 3:
Μετά την εκτέλεση του JUnit_CustomOrder.class , η σειρά εκτέλεσης της δοκιμής έχει ως εξής με βάση την αύξουσα σειρά του μήκους του ονόματος των δοκιμαστικών περιπτώσεων:
- Προσθήκη(),
- υπότιτλος (),
- διαιρέστε ()
- πολλαπλασιάζω()
συμπέρασμα
Για να ολοκληρώσετε αυτό το σεμινάριο σχετικά με το JUnit Test Execution Order.
- Μάθαμε πώς να καθορίζουμε τη σειρά των δοκιμαστικών περιπτώσεων χρησιμοποιώντας συγκεκριμένους σχολιασμούς καθώς και συγκεκριμένες τάξεις.
- Μάθαμε επίσης διάφορους τρόπους για να παραγγείλετε δοκιμές για JUnit 4 και JUnit 5, βάσει των οποίων άλλαξαν οι στρατηγικές παραγγελίας.
- Εκτός αυτού, μάθαμε πώς στο JUnit 5, θα μπορούσαμε επίσης να δημιουργήσουμε μια προσαρμοσμένη τάξη ταξινόμησης και να τη χρησιμοποιήσουμε για την παραγγελία των δοκιμαστικών περιπτώσεων κατά την εκτέλεση τους.
=> Ρίξτε μια ματιά στον οδηγό για αρχάριους JUnit εδώ.
Συνιστώμενη ανάγνωση
- Δοκιμές JUnit: Πώς να γράψετε περιπτώσεις δοκιμής JUnit με παραδείγματα
- Λίστα σχολίων JUnit: JUnit 4 Vs JUnit 5
- JUnit Ignore Test Case: JUnit 4 @Ignore Vs JUnit 5 @Disabled
- JUnit Test Suite & Φιλτράρισμα δοκιμαστικών περιπτώσεων: JUnit 4 Vs JUnit 5
- Τι είναι ένα προσάρτημα δοκιμής JUnit: Tutorial With JUnit 4 Παραδείγματα
- Tutorial JUnit για αρχάριους - Τι είναι το JUnit Testing
- Πολλαπλοί τρόποι εκτέλεσης δοκιμών JUnit
- Πώς να εκτελέσετε εκτενείς εκτελέσεις δοκιμών Appium παράλληλα