Μια καλογραμμένη δοκιμαστική σουίτα θα έχει πολλές δοκιμές για ένα συγκεκριμένο χαρακτηριστικό. Ομαδοποιώντας τα σχετικά χαρακτηριστικά, μπορείτε να εκφράσετε τη σχέση μεταξύ πολλών ομάδων δοκιμών. Ένα από τα κύρια πλεονεκτήματα της ομαδοποίησης τάξεων δοκιμής μονάδων είναι ότι μπορεί να μειώσει την ποσότητα του κωδικού δοκιμής που γράφετε, καθώς τα ομαδοποιημένα τεστ μοιράζονται πόρους.
Το JUnit 5 σάς επιτρέπει να δημιουργείτε ένθετες δοκιμές χρησιμοποιώντας τον σχολιασμό @Nested. Σε αυτό το άρθρο, θα μάθετε τι είναι ο σχολιασμός @Nested και πώς να τον χρησιμοποιήσετε.
Τι είναι ένα ένθετο τεστ;
Ο σχολιασμός @Nested του JUnit σηματοδοτεί ότι η κλάση με την οποία συσχετίζεται είναι μια εσωτερική κλάση, η οποία είναι μέλος μιας άλλης κλάσης. Ένα ένθετο τεστ είναι μια κλάση δοκιμής που περιέχει τον σχολιασμό @Nested, καθώς αυτό σημαίνει ότι υπάρχει μία (ή περισσότερες) εσωτερική κλάση σε μια κλάση δοκιμής ανώτατου επιπέδου. Μια ένθετη κλάση μπορεί να εμφανιστεί σε μια κλάση ανώτατου επιπέδου ή σε μια κλάση που είναι επίσης ένθετη.
Δημιουργία τάξεων Java για δοκιμή
Μια ένθετη κλάση δοκιμής κληρονομεί όλα τα χαρακτηριστικά της γονικής κλάσης της. Επομένως, η καλύτερη στιγμή για να δημιουργήσετε μια ένθετη δοκιμή είναι όταν υπάρχει μια λογική ομαδοποίηση των δοκιμαστικών περιπτώσεων ή όταν μια μεμονωμένη περίπτωση δοκιμής έχει διαφορετικά χαρακτηριστικά. Ένα καλό παράδειγμα αυτού είναι όταν θέλετε να δοκιμάσετε την ικανότητα μιας κλάσης να δημιουργεί χρήσιμα αντικείμενα. Ένα άλλο παράδειγμα είναι όταν μια μεμονωμένη μέθοδος έχει δύο ή περισσότερους σκοπούς.
Ακολουθεί ένα παράδειγμα κλάσης που μπορείτε να χρησιμοποιήσετε σε μια εφαρμογή λιανικής, που δείχνει πώς μπορείτε να δημιουργήσετε μια ένθετη δοκιμή.
δημόσιοτάξηΠελάτης{
προστατεύονταιενθ Κωδικός πελάτη;
προστατεύονται Συμβολοσειρά πελάτηΌνομα;
προστατεύονται Κωδικός πελάτη συμβολοσειράς;// προεπιλεγμένος κατασκευαστής
δημόσιοΠελάτης(){
Αυτό.customerId = 0;
Αυτό.customerName = "";
Αυτό.customerCode ="";
}// πρωτεύων κατασκευαστής
δημόσιοΠελάτης(ενθ Αναγνωριστικό πελάτη, Όνομα πελάτη συμβολοσειράς, Κωδικός πελάτη συμβολοσειράς){
Αυτό.customerId = customerId;
Αυτό.customerName = Όνομα πελάτη;
Αυτό.customerCode = customerCode;
}// κατασκευαστής αντιγραφής
δημόσιοΠελάτης(Πελάτης πελάτης){
Αυτό.customerId = customer.customerId;
Αυτό.customerName = customer.customerName;
Αυτό.customerCode = customer.customerCode;
}// getters και setters
δημόσιοενθgetCustomerId(){
ΕΠΙΣΤΡΟΦΗ Κωδικός πελάτη;
}δημόσιοκενόςsetCustomerId(ενθ Κωδικός πελάτη){
Αυτό.customerId = customerId;
}δημόσιο Σειρά getCustomerName(){
ΕΠΙΣΤΡΟΦΗ Όνομα πελάτη;
}δημόσιοκενόςsetCustomerName(Συμβολοσειρά Όνομα πελάτη){
Αυτό.customerName = Όνομα πελάτη;
}δημόσιο Σειρά getCustomerCode(){
ΕΠΙΣΤΡΟΦΗ κωδικός πελάτη;
}δημόσιοκενόςsetCustomerCode(Κωδικός πελάτη συμβολοσειράς){
Αυτό.customerCode = customerCode;
}// καθορίστε ένα ποσοστό έκπτωσης πελάτη με βάση τον τύπο του πελάτη
δημόσιοδιπλόΤύπος πελάτη(Κωδικός πελάτη συμβολοσειράς){
διπλό έκπτωση = 0;αν (customerCode.toLowerCase().equals("pre")) {
έκπτωση = 0.10;
} αλλούαν (customerCode.toLowerCase().equals("gen")) {
έκπτωση = 0.02;
} αλλούαν (customerCode.toLowerCase().equals("νέος")) {
έκπτωση = 0.05;
}ΕΠΙΣΤΡΟΦΗ έκπτωση;
}
// προσδιορίστε το grandTotal ενός πελάτη με βάση τον τύπο του πελάτη
δημόσιοδιπλόσύνολο(διπλό σύνολο){
διπλό έκπτωση = clientType (customerCode);
διπλό discountPercentage = σύνολο * έκπτωση;
διπλό τελικόΣύνολο = σύνολο - έκπτωσηΠοσοστό;
ΕΠΙΣΤΡΟΦΗ τελικόΣύνολο;
}
}
Αυτή η κλάση πελάτη περιέχει όλα τα στοιχεία μιας κλάσης Java, με δύο μεθόδους.
Δημιουργία ένθετης δοκιμής με το JUnit 5
Η κλάση Customer έχει πολλούς κατασκευαστές, λήπτες και ρυθμιστές και δύο μεθόδους. Μπορείτε να δημιουργήσετε μια ένθετη κλάση (εντός της κλάσης δοκιμής πελάτη) που δημιουργεί ένα νέο αντικείμενο πελάτη και ελέγχει όλα τα στοιχεία του.
εισαγωγήστατικόςorg.junit.Ζεύς.api.Ισχυρισμοί.*;
εισαγωγήorg.junit.Ζεύς.api.DisplayName;
εισαγωγήorg.junit.Ζεύς.api.Φωλιασμένο;
εισαγωγήorg.junit.Ζεύς.api.Δοκιμή;@DisplayName("Τάξη δοκιμής πελάτη που δείχνει πώς να ΔημιουργώΦωλιασμένο Δοκιμές.")
τάξηCustomerTest{
προστατεύονταιενθ Αναγνωριστικό πελάτη = 301;
προστατευμένη συμβολοσειρά Όνομα πελάτη = "Μάικ Γουίλσον";
προστατευμένη συμβολοσειρά clientCode = "Προ";
προστατεύονταιδιπλό σύνολο = 600;@Φωλιασμένο
@DisplayName("Ένθετη κλάση δοκιμής Customer Builder μέσα σε μια κλάση δοκιμής ανώτατου επιπέδου")
τάξηCustomerBuilderTest{
Πελάτης πελάτης = νέος Πελάτης (customerId, customerName, customerCode);
διπλό grandTotal = customer.grandTotal (σύνολο);
@Δοκιμή
@DisplayName("Δοκιμή του Πελάτη's Κατασκευαστές τάξης, Getters και Setters, και Methods.")
κενόςΚατασκευαστής πελατών(){
assertAll(() -> {
διεκδικώ Ίσο(Κωδικός πελάτη, πελάτης.getCustomerId());
διεκδικώ Ίσο(Όνομα πελάτη, πελάτης.getCustomerName());
διεκδικώ Ίσο(κωδικός πελάτη, πελάτης.getCustomerCode());
διεκδικώ Ίσο(0.10, πελάτης.Τύπος πελάτη(κωδικός πελάτη));
assertEquals (540, grandTotal);
});
}
}
}
Η κλάση CustomerTest είναι η κλάση δοκιμής ανώτατου επιπέδου σε μια ένθετη κλάση CustomerBuilderTest. Το CustomerBuilderTest δημιουργεί ένα νέο αντικείμενο πελάτη και δοκιμάζει τα στοιχεία του χρησιμοποιώντας δοκιμές διεκδίκησης.
Η εκτέλεση της κλάσης δοκιμής CustomerTest παράγει τα ακόλουθα επιτυχημένα αποτελέσματα δοκιμής:
Τα ονόματα των τάξεων δοκιμής και η μέθοδος δοκιμής είναι περιγραφικά και περιεκτικά, χάρη στο Σχολιασμός @DisplayName.
Η γνώση του τρόπου δοκιμής λογισμικού είναι ζωτικής σημασίας
Η τεχνολογία είναι μια σημαντική πτυχή της καθημερινής ζωής για τους περισσότερους ανθρώπους. Τα στοιχήματα για τη δημιουργία λογισμικού που κάνει ακριβώς αυτό που υποτίθεται ότι κάνει δεν ήταν ποτέ υψηλότερα.
Ένα αυτοοδηγούμενο αυτοκίνητο που δεν υπολογίζει σωστά την εγγύτητά του σε άλλο αντικείμενο μπορεί να προκαλέσει μεγάλο ατύχημα. Επομένως, πρέπει να δοκιμάσετε την εφαρμογή σας σε κάθε στάδιο της ανάπτυξής της.