Πώς να χρησιμοποιήσετε τους σχολιασμούς @Before και @After στο JUnit

Πώς να χρησιμοποιήσετε τους σχολιασμούς @Before και @After στο JUnit

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





ΚΑΤΑΣΚΕΥΗ ΒΙΝΤΕΟ ΤΗΣ ΗΜΕΡΑΣ

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





Ο σχολιασμός @BeforeAll

Μια κλάση δοκιμής JUnit μπορεί να έχει μία ή περισσότερες μεθόδους δοκιμής. Ο σχολιασμός @BeforeAll σηματοδοτεί ότι μια συγκεκριμένη μέθοδος πρέπει να εκτελεστεί πριν από όλες τις μεθόδους δοκιμής σε μια κλάση δοκιμής. Η μέθοδος που σχετίζεται με αυτόν τον σχολιασμό εκτελείται μόνο μία φορά (στην αρχή της δοκιμής) ανεξάρτητα από τον αριθμό των μεθόδων δοκιμής στην κατηγορία δοκιμής.





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

Η τάξη αριθμομηχανών

package com.app; 
public class Calculator {
public static int add(int num1, int num2) {
return num1 + num2;
}
public static int subtract(int num1, int num2) {
return num1 - num2;
}
public static int multiply(int num1, int num2) {
return num1 * num2;
}
public static int divide(int num1, int num2) {
return num1 / num2;
}
}

Η τάξη CalculatorTest

import static org.junit.jupiter.api.Assertions.*; 
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.DisplayName;

@DisplayName("Test class demonstrating how to use the before and after annotations.")
class CalculatorTest {
@BeforeAll
public static void powerOnCalculator() {
System.out.println("The calculator is on");
}

@Test
@DisplayName("Testing method that adds two integer values.")
public void testAdd() {
assertEquals(7, Calculator.add(3, 4));
}

@Test
@DisplayName("Testing method that subtracts one integer value from another.")
public void testSubtract() {
assertEquals(6, Calculator.subtract(9, 3));
}

@Test
@DisplayName("Testing method that multiplies two integer values")
public void testMultiply() {
assertEquals(10, Calculator.multiply(5, 2));
}

@Test
@DisplayName("Testing method that divides one integer value by another")
public void testDivide() {
assertEquals(2, Calculator.divide(4, 2));
}
}

Σε αυτήν την κλάση, ο σχολιασμός @BeforeAll λειτουργεί με τη μέθοδο powerOnCalculator(), η οποία εκτυπώνει το 'The calculator is on' πριν από οποιαδήποτε δοκιμαστική εκτέλεση. Η επιτυχής εκτέλεση δοκιμής εκτυπώνει την ακόλουθη αναφορά δοκιμής:



  Αναφορά σχολιασμού BeforeAll

Όπως μπορείτε να δείτε, η μέθοδος που σχετίζεται με τον σχολιασμό @BeforeAll δεν εμφανίζεται στην αναφορά δοκιμής. Ωστόσο, εάν υπάρχει σφάλμα στη μέθοδο σχολιασμού @BeforeAll, τα αποτελέσματα της αναφοράς δοκιμής θα το υποδείξουν με αποτυχία.

Ο σχολιασμός @BeforeEach

Όπως η σχολιασμένη μέθοδος @BeforeAll, η μέθοδος σχολιασμού @BeforeEach δεν θα εμφανίζεται στην αναφορά δοκιμής. Η σχολιασμένη μέθοδος @BeforeEach εκτελείται πριν από κάθε μέθοδο δοκιμής σε μια κλάση δοκιμής. Έτσι, εάν μια κλάση δοκιμής περιέχει δύο μεθόδους δοκιμής, τότε ο σχολιασμός @BeforeEach θα εκτελεστεί δύο φορές.





πώς να ανακτήσετε διαγραμμένα μηνύματα από το messenger
import static org.junit.jupiter.api.Assertions.*; 
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@DisplayName("Test class demonstrating how to use the before and after annotations.")
class CalculatorTest {
@BeforeAll
public static void powerOnCalculator() {
System.out.println("The calculator is on");
}
@BeforeEach
public void clearCalculator() {
System.out.println("The calculator is ready");
}
@Test
@DisplayName("Testing method that adds two integer values.")
public void testAdd() {
assertEquals(7, Calculator.add(3, 4));
}
@Test
@DisplayName("Testing method that subtracts one integer value from another.")
public void testSubtract() {
assertEquals(6, Calculator.subtract(9, 3));
}
@Test
@DisplayName("Testing method that multiplies two integer values")
public void testMultiply() {
assertEquals(10, Calculator.multiply(5, 2));
}
@Test
@DisplayName("Testing method that divides one integer value by another")
public void testDivide() {
assertEquals(2, Calculator.divide(4, 2));
}
}

Η προσθήκη του σχολιασμού @BeforeEach στην κλάση CalculatorTest παράγει την ακόλουθη έξοδο:

  Πριν από κάθε έξοδο σχολιασμού

Η μέθοδος που σχετίζεται με τον σχολιασμό @BeforeEach εκτελείται τέσσερις φορές, μία φορά πριν από κάθε μέθοδο δοκιμής. Θα πρέπει να σημειώσετε ότι η μέθοδος @BeforeEach δεν είναι στατική, έχει έναν τύπο άκυρης επιστροφής και δεν είναι ιδιωτική, καθώς πρόκειται για υποχρεωτικές προϋποθέσεις. Είναι επίσης σημαντικό να σημειωθεί ότι η μέθοδος που σχετίζεται με τον σχολιασμό @BeforeEach εκτελείται μετά τη μέθοδο @BeforeAll.





Ο σχολιασμός @AfterAll

Μια μέθοδος με το @AfterAll Annotation θα εκτελεστεί αφού όλες οι μέθοδοι δοκιμής στην κλάση δοκιμής ολοκληρώσουν την εκτέλεσή τους. Ο σχολιασμός @AfterAll είναι ιδανικός για βασικές λειτουργίες αρχείων , όπως το κλείσιμο ενός αρχείου ή η αποσύνδεση από μια βάση δεδομένων. Ο σχολιασμός @AfterAll είναι το αντίστοιχο του σχολιασμού @BeforeAll. Όπως ο σχολιασμός @BeforeAll, ο σχολιασμός @AfterAll πρέπει να είναι στατικός, να μην είναι απόρρητος και πολλά να μην είναι ιδιωτικά.

@AfterAll 
public static void powerOffCalculator() {
System.out.println("The calculator is off");
}

Η προσθήκη της μεθόδου @AfterAll με σχολιασμό στην υπάρχουσα κλάση CalculatorTest εκτυπώνει την ακόλουθη έξοδο στην κονσόλα:

βρείτε την κάρτα γραφικών σας Windows 10
  Έξοδος σχολιασμού AfterAll

Σημειώστε ότι η μέθοδος powerOffCalculator(), η οποία χρησιμοποιεί τον σχολιασμό @AfterAll, εκτυπώνεται στο τέλος της κλάσης δοκιμής, μετά την εκτέλεση όλων των μεθόδων δοκιμής.

Το @AfterEach Annotation

Ο σχολιασμός @AfterEach είναι το αντίστοιχο του σχολιασμού @BeforeEach. Έχουν τις ίδιες υποχρεωτικές διατάξεις, οι οποίες είναι ελαφρώς διαφορετικές από αυτές των σχολιασμών @BeforeAll και @AfterAll. Αυτό που διακρίνει τον σχολιασμό @AfterEach από τον σχολιασμό @BeforeEach (εκτός από τα ονόματά τους) είναι ότι η μέθοδος @AfterEach εκτελείται μετά από κάθε μέθοδο δοκιμής.

@AfterEach 
public void returnResults() {
System.out.println("The results are ready");
}

Η εκτέλεση της κλάσης CalculatorTest εκτυπώνει την ακόλουθη έξοδο στην κονσόλα:

  Έξοδος AfterEach σχολιασμού

Η έξοδος δείχνει ότι η μέθοδος που σχετίζεται με τον σχολιασμό @AfterEach (returnResults) εκτυπώνεται τέσσερις φορές. Κάθε εκτέλεση της μεθόδου returnResults() συμβαίνει μόνο μετά την εκτέλεση κάθε δοκιμής μονάδας. Αυτό είναι εμφανές από το γεγονός ότι η έξοδος της μεθόδου returnResults() εμφανίζεται μετά από κάθε έξοδο από τη μέθοδο που σχετίζεται με τον σχολιασμό @BeforeEach.

Γυαλίστε τις σουίτες δοκιμών σας χρησιμοποιώντας σχολιασμούς

Το JUnit σάς επιτρέπει να χειρίζεστε διαδικασίες που δεν σχετίζονται με τη δοκιμή χρησιμοποιώντας τους σχολιασμούς πριν και μετά το ζευγάρι. Αυτοί οι τέσσερις σχολιασμοί ανήκουν σε μια λίστα με πολλούς άλλους σχολιασμούς που προσθέτουν αξία στις δοκιμές σας. Ένας άλλος από τους σχολιασμούς του JUnit είναι το @DisplayName.

Τα δύο παραδείγματα κώδικα που εμφανίζουν την πλήρη κλάση CalculatorTest χρησιμοποιούν τον σχολιασμό @DisplayName. Ο σχολιασμός @DisplayName σάς βοηθά να δημιουργήσετε πιο ουσιαστικά ονόματα για τις τάξεις και τις μεθόδους δοκιμής σας.