@Ennen ja @jälkeen -merkintöjen käyttäminen JUnitissa

@Ennen ja @jälkeen -merkintöjen käyttäminen JUnitissa

Kun kirjoitat yksikkötestipakettia, sinun on ehkä suoritettava joitain ei-testaukseen liittyviä toimintoja. Nämä toiminnot voivat olla missä tahansa muodossa. Sinun on ehkä muodostettava yhteys tietokantaan tai kerättävä resursseja ennen testin suorittamista. Kunkin testitapauksen suorittamisen jälkeen saatat joutua vapauttamaan joitain resursseja.





PÄIVÄN VIDEON TEKEMINEN

Näiden ei-testaukseen liittyvien toimintojen suorittaminen yksikkötestiluokan ulkopuolella saattaa olla työlästä ellei mahdotonta. Testiluokkasi onnistunut suorittaminen voi riippua näistä toiminnoista, joten JUnit tarjoaa kaksi merkintäparia tämän ongelman ratkaisemiseksi.





apua joululahjaksi pienituloisille perheille

@Ennen kaikkea -merkintä

JUnit-testiluokassa voi olla yksi tai useampi testimenetelmä. @BeforeAll-merkintä osoittaa, että tietyn menetelmän tulee suorittaa ennen testiluokan kaikkia testimenetelmiä. Tähän huomautukseen liittyvä menetelmä suoritetaan vain kerran (testin alussa) riippumatta testiluokan testimenetelmien lukumäärästä.



Kaikkien @BeforeAll-merkintää käyttävien menetelmien on noudatettava muutamia määräyksiä. Näillä menetelmillä on oltava void return -tyyppi, niiden on oltava julkisia eivätkä yksityisiä. @BeforeAll-merkintä on ihanteellinen a yhteys tietokantaan tai luodaan uusi tiedosto. Tämä artikkeli käyttää laskimen testiluokkaa osoittamaan, kuinka voit käyttää @BeforeAll-merkintää.

Laskin-luokka

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-luokka

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));
}
}

Tässä luokassa @BeforeAll-merkintä toimii powerOnCalculator()-menetelmän kanssa, joka tulostaa 'Laskin on päällä' ennen testiajoa. Onnistuneen testin suorittaminen tulostaa seuraavan testiraportin:



  BeforeAll-merkintäraportti

Kuten näet, @BeforeAll-merkintään liittyvä menetelmä ei näy testiraportissa. Jos @BeforeAll-merkintämenetelmässä on kuitenkin virhe, testiraportin tulokset osoittavat sen epäonnistuneena.

@BeforeEach-merkintä

Kuten @BeforeAll-merkitty menetelmä, @BeforeEach-merkitty menetelmä ei näy testiraportissa. @BeforeEach annotoitu menetelmä suoritetaan ennen jokaista testimenetelmää testiluokassa. Joten jos testiluokka sisältää kaksi testimenetelmää, @BeforeEach-merkintä suoritetaan kahdesti.





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-merkinnän lisääminen CalculatorTest-luokkaan tuottaa seuraavan tuloksen:

  Ennen jokaista merkintää

@BeforeEach-merkintään liittyvä menetelmä suoritetaan neljä kertaa, kerran ennen kutakin testimenetelmää. Huomaa, että @BeforeEach-menetelmä ei ole staattinen, sillä on void-palautustyyppi, eikä se ole yksityinen, koska nämä ovat pakollisia ehtoja. On myös tärkeää huomata, että @BeforeEach-merkintään liittyvä menetelmä suoritetaan @BeforeAll-menetelmän jälkeen.





@AfterAll-merkintä

Menetelmä, jossa on @AfterAll Annotation, suoritetaan sen jälkeen, kun kaikki testiluokan testimenetelmät ovat suorittaneet suorituksensa. @AfterAll-merkintä on ihanteellinen tiedostojen perustoiminnot , kuten tiedoston sulkeminen tai yhteyden katkaiseminen tietokantaan. @AfterAll-merkintä on @BeforeAll-merkinnän vastine. @BeforeAll-merkinnän tavoin myös @AfterAll-merkinnän on oltava staattinen, sen on palautettava mitätön, eikä se saa olla yksityinen.

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

@AfterAll-merkityn menetelmän lisääminen olemassa olevaan CalculatorTest-luokkaan tulostaa seuraavan tulosteen konsoliin:

  AfterAll-merkintätulostus

Huomaa, että powerOffCalculator()-menetelmä, joka käyttää @AfterAll-merkintää, tulostuu testiluokan lopussa, kun kaikki testimenetelmät on suoritettu.

@AfterEach-merkintä

@AfterEach-merkintä on @BeforeEach-merkinnän vastine. Niissä on samat pakolliset määräykset, jotka poikkeavat hieman @BeforeAll- ja @AfterAll-merkinnöistä. Se, mikä erottaa @AfterEach-merkinnän @BeforeEach-merkinnästä (muut kuin niiden nimet), on se, että @AfterEach-menetelmä suoritetaan jokaisen testimenetelmän jälkeen.

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

CalculatorTest-luokan suorittaminen tulostaa seuraavan tulosteen konsoliin:

  Jokaisen huomautuksen tulos

Tulos osoittaa, että @AfterEach-merkintään liittyvä menetelmä (returnResults) tulostuu neljä kertaa. Jokainen returnResults()-menetelmän suoritus tapahtuu vasta kunkin yksikkötestin suorittamisen jälkeen. Tämä käy ilmi siitä, että returnResults()-menetelmän tulos näkyy jokaisen @BeforeEach-merkintään liittyvän menetelmän lähdön jälkeen.

Kiillota testisarjasi merkintöjen avulla

JUnitin avulla voit käsitellä ei-testaukseen liittyviä prosesseja käyttämällä ennen ja jälkeen -parimerkintöjä. Nämä neljä merkintää kuuluvat useiden muiden merkintöjen luetteloon, jotka lisäävät arvoa testeisiisi. Toinen JUnitin merkinnöistä on @DisplayName.

Kaksi koodiesimerkkiä, jotka näyttävät koko CalculatorTest-luokan, käyttävät @DisplayName-merkintää. @DisplayName-merkintä auttaa sinua luomaan merkityksellisempiä nimiä testiluokillesi ja testimenetelmillesi.