Ο σκοπός μιας δοκιμής μονάδας είναι να εντοπίσει τα σφάλματα σε μια εφαρμογή το συντομότερο δυνατό. Αν και πολλά κανάλια μπορεί να σας οδηγήσουν στον ίδιο στόχο, θα πρέπει να στοχεύσετε να χρησιμοποιήσετε την πιο αποτελεσματική διαδρομή.
Μια σουίτα δοκιμών JUnit μπορεί να έχει πολλές δοκιμαστικές κλάσεις που χρειάζονται τα ίδια δεδομένα, αλλά δεν μπορείτε να επαναχρησιμοποιήσετε δεδομένα δοκιμής. Σε προηγούμενες εκδόσεις του JUnit, μια καλή προσέγγιση ήταν να δημιουργήσετε μια βοηθητική μέθοδο και μετά να καλέσετε αυτήν τη μέθοδο κάθε φορά που μια κλάση δοκιμής χρειαζόταν τα δεδομένα της.
Η JUnit 5 παρέχει μια πιο αποτελεσματική προσέγγιση σε αυτό το πρόβλημα: ένεση εξάρτησης (DI).
Τι είναι η ένεση εξάρτησης;
Το DI είναι ένα σχέδιο σχεδίασης όπου ένα αντικείμενο παρέχει τις εξαρτήσεις ενός άλλου αντικειμένου. Όταν δημιουργείτε μια εφαρμογή Java, μπορεί να έχετε μια κλάση που εξαρτάται από ένα αντικείμενο που δημιουργεί μια άλλη κλάση για να εκτελέσει τη λειτουργία της.
Πριν από την ένεση εξάρτησης, για να χρησιμοποιήσετε ένα αντικείμενο από διαφορετική κλάση, θα πρέπει να δημιουργήσετε ένα νέο στιγμιότυπο αυτού του αντικειμένου εντός της κλάσης που εξαρτάται από αυτό. Έτσι, εάν είχατε πολλές κλάσεις που εξαρτώνται από το ίδιο αντικείμενο, θα έπρεπε να δημιουργήσετε πολλές παρουσίες του μέσα στις εξαρτημένες κλάσεις.
Το DI σάς επιτρέπει να χρησιμοποιήσετε ένα αντικείμενο σε μια εξαρτημένη κλάση, χωρίς να δημιουργήσετε μια νέα παρουσία του σε αυτήν την κλάση.
Έγχυση εξάρτησης στην JUnit 5
Το JUnit 5 σάς επιτρέπει να εισάγετε εξαρτήσεις τόσο σε μεθόδους δοκιμής όσο και σε κατασκευαστές. Αυτό είναι σημαντικό καθώς οι προηγούμενες εκδόσεις του πλαισίου δεν επέτρεπαν στις μεθόδους δοκιμής ή στους κατασκευαστές να έχουν παραμέτρους.
Το JUnit 5 σας επιτρέπει να κάνετε ένεση όσες παραμέτρους θέλετε. Το μόνο πρόβλημα είναι ότι το ParameterResolver API πρέπει να μπορεί να επιλύει κάθε παράμετρο κατά το χρόνο εκτέλεσης. Το JUnit έχει επί του παρόντος τρεις ενσωματωμένους αναλυτές παραμέτρων που χρησιμοποιεί αυτόματα. Για να χρησιμοποιήσετε οποιοδήποτε άλλο εργαλείο επίλυσης, θα πρέπει να το καταχωρήσετε ρητά χρησιμοποιώντας τον σχολιασμό @ExtendWith.
Έγχυση εξαρτήσεων σε JUnit
Αυτό το δείγμα προγράμματος χρησιμοποιεί μία από τις ενσωματωμένες παραμέτρους του JUnit (το TestInfoParameterResolver), για να δείξει πώς μπορείτε να εισάγετε μια εξάρτηση σε Δοκιμή 5ης ενότητας. Το TestInfoParameterResolver επιλύει αντικείμενα που ανήκουν στη διεπαφή TestInfo. Έτσι, το JUnit 5 θα παρέχει μια παρουσία της διεπαφής TestInfo σε οποιαδήποτε μέθοδο ή κατασκευαστή που τη χρησιμοποιεί.
εισαγωγήστατικός org.junit.jupiter.api. Ισχυρισμοί.*;
εισαγωγή org.junit.jupiter.api. DisplayName;
εισαγωγή org.junit.jupiter.api. Δοκιμή;
εισαγωγή org.junit.jupiter.api. TestInfo;τάξηInfoTestInterfaceTest{
// Έγχυση αντικειμένου testInfo στον κατασκευαστή InfoTestInterfaceTest
InfoTestInterfaceTest (TestInfo testInfo) {
assertEquals("InfoTestInterfaceTest", testInfo.getDisplayName());
}// Έγχυση αντικειμένου testInfo σε μεθόδους
@Δοκιμή
κενόςtestMethodName(TestInfo testInfo){
assertEquals("testMethodName (TestInfo)", testInfo.getDisplayName());
}
@Δοκιμή
@DisplayName("μέθοδος που χρησιμοποιεί το @DisplayName σχόλιο")
κενόςtestMethodNameTwo(TestInfo testInfo){
assertEquals("μέθοδος που χρησιμοποιεί το @DisplayName σχολιασμός", testInfo.getDisplayName());
}
}
Η παραπάνω δοκιμή JUnit δείχνει πώς να εισάγετε ένα αντικείμενο σε έναν κατασκευαστή και δύο μεθόδους. ο JUnit TestInfo Η διεπαφή έχει τέσσερις μεθόδους που μπορείτε να χρησιμοποιήσετε με το αντικείμενό της.
Η μέθοδος getDisplayName() είναι η πιο χρήσιμη. Επιστρέφει το εμφανιζόμενο όνομα της τρέχουσας μεθόδου δοκιμής ή του κατασκευαστή. Από προεπιλογή, αυτό το όνομα βασίζεται στην κλάση. Αν όμως χρησιμοποιήσετε τον σχολιασμό @DisplayName, η μέθοδος getDisplayName() θα επιστρέψει αυτό το κείμενο.
Η παραπάνω κλάση δοκιμής δημιουργεί την ακόλουθη αναφορά δοκιμής:
Χρησιμοποιήστε το DI στις μεθόδους @Before και @After
Υπάρχουν τέσσερις άλλοι τύποι σχολιασμένων μεθόδων JUnit που υποστηρίζουν εξαρτήσεις. Αυτοί είναι οι σχολιασμοί @BeforeAll, @BeforeEach, @AfterAll και @AfterEach. Όπως και η μέθοδος @Test, το μόνο που χρειάζεται να κάνετε είναι να μεταβιβάσετε ένα αντικείμενο σε οποιαδήποτε από τις μεθόδους πριν ή μετά ως παράμετρο και είστε έτοιμοι.
Οι σχολιασμοί @Before και @After είναι σημαντικοί, καθώς σας βοηθούν επίσης να αναπτύξετε πιο αποτελεσματικό κώδικα δοκιμής. Η δυνατότητα εισαγωγής εξαρτήσεων σε αυτές τις μεθόδους θα βελτιώσει περαιτέρω τον κωδικό δοκιμής σας.