Προγραμματισμός

Δοκιμές μονάδας και ολοκλήρωσης με κατηγορίες Maven και JUnit

Αυτό το παράδειγμα δείχνει πώς μπορείτε να διαχωρίσετε δοκιμές μονάδας και ενοποίησης χρησιμοποιώντας τις κατηγορίες Maven και JUnit.

Είναι ιδιαίτερα χρήσιμο για τις υπάρχουσες δοκιμαστικές σουίτες και μπορεί να εφαρμοστεί σε λίγα λεπτά.

Η προηγούμενη ανάρτησή μου έδειξε πώς να χρησιμοποιήσουμε ένα προφίλ maven για να χωρίσουμε τα τεστ ενοποίησης και ενοποίησης.

//johndobie.blogspot.co.uk/2011/06/seperating-maven-unit-integration-tests.html

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

Προσφέρει τα περισσότερα από τα οφέλη του πρωτότυπου και κάθεται πιο άνετα στον κόσμο του Maven.

Ο κωδικός για το παράδειγμα είναι εδώ.

svn co //designbycontract.googlecode.com/svn/trunk/examples/maven/categor ... mvn καθαρή εγκατάσταση 

Από το JUnit 4.8 μπορείτε να ορίσετε τις δικές σας κατηγορίες για δοκιμές. Αυτό σας δίνει τη δυνατότητα να επισημάνετε και να ομαδοποιήσετε δοκιμές.

Αυτό το παράδειγμα δείχνει πόσο εύκολο είναι να διαχωρίσετε τη δοκιμή μονάδας και ενοποίησης χρησιμοποιώντας τον σχολιασμό @Catgegory.

//kentbeck.github.com/junit/javadoc/latest/org/junit/experimental/categories/Categories.html

Το πρώτο βήμα στην ομαδοποίηση μιας δοκιμής με χρήση κατηγοριών είναι η δημιουργία μιας διεπαφής δείκτη.

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

δημόσια διεπαφή IntegrationTest {} 

Προσθέστε το σχολιασμό κατηγορίας στην κορυφή της δοκιμαστικής τάξης σας. Παίρνει το όνομα της νέας διεπαφής σας.

εισαγωγή org.junit.experimental.categories.Category; @Category (IntegrationTest.class) δημόσια τάξη ExampleIntegrationTest {@Test public void longRunningServiceTest () ρίχνει την εξαίρεση {}} 

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

Εάν έχετε δοκιμές μονάδας και ενοποίησης σε μία τάξη, τότε διαιρέστε την.

Η ομορφιά αυτής της λύσης είναι ότι τίποτα δεν αλλάζει πραγματικά από την πλευρά της δοκιμής μονάδας των πραγμάτων.

Προσθέτουμε απλώς κάποια διαμόρφωση στο πρόσθετο maven surefire για να το κάνουμε να αγνοήσει τυχόν δοκιμές ενσωμάτωσης.

 org.apache.maven.plugins maven-surefire-plugin 2.11 org.apache.maven.surefire surefire-junit47 2.12 ** / *. class com.test.annotation.type.IntegrationTest 

Υπάρχουν 2 πολύ σημαντικά μέρη. Το πρώτο είναι να διαμορφώσετε το surefire για να αποκλείσετε όλες τις δοκιμές ενοποίησης.

com.test.annotation.type.IntegrationTest 

Το Surefire θα εκτελέσει όλες τις δοκιμές σας, εκτός από αυτές που χαρακτηρίζονται ως δοκιμές ενοποίησης.

Το άλλο σημαντικό μέρος είναι να βεβαιωθείτε ότι το plugin surefire χρησιμοποιεί το σωστό πάροχο JUnit. Ο πάροχος JUnit47 απαιτείται για τον σωστό εντοπισμό των κατηγοριών.

  org.apache.maven.surefire surefire-junit47 2.12 

Για να βεβαιωθούμε ότι αυτό λειτουργεί σωστά, μπορούμε να εκτελέσουμε τις δοκιμές μονάδας

καθαρή δοκιμή mvn 

Μπορείτε να δείτε από την έξοδο παρακάτω ότι εκτελείται ο έλεγχος μονάδας, αλλά όχι ο έλεγχος ενοποίησης.

-------------------------------------------------- ----- ΔΟΚΙΜΕΣ -------------------------------------------- ----------- Εκτέλεση com.test.EmptyUnitTest Οι δοκιμές εκτελούνται: 1, Αποτυχίες: 0, Σφάλματα: 0, Παράλειψη: 0, Χρόνος που πέρασε: 0 δευτερόλεπτα Αποτελέσματα: Δοκιμές εκτελέστηκαν: 1, Αποτυχίες: 0 Σφάλματα: 0, Παράλειψη: 0 [INFO] ---------------------------------------- -------------------------------- [ΠΛΗΡΟΦΟΡΙΕΣ] ΚΑΤΑΣΚΕΥΗ ΕΠΙΤΥΧΙΑΣ [ΠΛΗΡΟΦΟΡΙΕΣ] ---------- -------------------------------------------------- ------------ 

Και πάλι η διαμόρφωση για αυτό είναι πολύ απλή.

Χρησιμοποιούμε το τυπικό plugafe failafe και το διαμορφώνουμε για να εκτελέσουμε μόνο τις δοκιμές ενοποίησης.

 maven-failafe-plugin 2.12 org.apache.maven.surefire surefire-junit47 2.12 com.test.annotation.type.IntegrationTest ενσωμάτωση-δοκιμή ** / *. τάξη 

Η διαμόρφωση χρησιμοποιεί έναν τυπικό στόχο εκτέλεσης για την εκτέλεση του plugafe failafe κατά τη φάση ολοκλήρωσης-δοκιμής του build.

Η ακόλουθη διαμόρφωση διασφαλίζει ότι εκτελούνται μόνο οι δοκιμές ενοποίησης.

com.test.annotation.type.IntegrationTest 

Και πάλι ο πάροχος JUnit πρέπει να ρυθμιστεί σωστά.

  org.apache.maven.surefire surefire-junit47 2.12 

Αυτό είναι!

Τώρα μπορούμε να εκτελέσουμε ολόκληρο το build.

καθαρή εγκατάσταση mvn 

Αυτή τη φορά, καθώς και το τεστ μονάδας, οι δοκιμές ολοκλήρωσης εκτελούνται κατά τη φάση ολοκλήρωσης-δοκιμής.

-------------------------------------------------- ----- ΔΟΚΙΜΕΣ -------------------------------------------- ----------- Εκτέλεση δοκιμών com.test.AnotherEmptyIntegrationTest: 1, Αποτυχίες: 0, Σφάλματα: 0, Παράλειψη: 0, Χρόνος που πέρασε: 0,016 δευτ. Αποτυχίες: 0, Σφάλματα: 0, Παράλειψη: 0, Χρόνος που πέρασε: 0 δευτερόλεπτα Αποτελέσματα: Δοκιμές που εκτελέστηκαν: 2, Αποτυχίες: 0, Σφάλματα: 0, Παράλειψη: 0 

Για να δείτε πόσο εύκολο είναι να προσθέσετε κάλυψη κώδικα σε αυτήν τη μέθοδο, ρίξτε μια ματιά σε αυτόν τον σύνδεσμο.

//johndobie.blogspot.co.uk/2012/05/easy-unit-and-integration-code-coverage.html

Για ένα πληρέστερο παράδειγμα που χρησιμοποιεί ξεκινά το Tomcat και μια βάση δεδομένων.

svn co //designbycontract.googlecode.com/svn/trunk/examples/maven/code-co ... mvn clean install -Ptomcat-embedded 

Βασίζεται σε αυτό το παράδειγμα

//johndobie.blogspot.com/2011/10/maven-integration-testing-and-spring.html

Αυτή η ιστορία, "Δοκιμές μονάδας και ολοκλήρωσης με κατηγορίες Maven και JUnit" δημοσιεύθηκε αρχικά από την JavaWorld.