Cara Menggunakan Anotasi @Sebelum dan @Selepas dalam JUnit

Cara Menggunakan Anotasi @Sebelum dan @Selepas dalam JUnit

Apabila anda menulis suite ujian unit, mungkin terdapat beberapa aktiviti bukan berkaitan ujian yang perlu anda lakukan. Aktiviti ini boleh dalam apa jua bentuk. Anda mungkin perlu menyambung ke pangkalan data atau mengumpulkan sumber sebelum anda melakukan ujian. Selepas setiap kes ujian dilaksanakan, anda mungkin perlu mengeluarkan beberapa sumber.





MAKEUSEOF VIDEO OF THE DAY

Melakukan mana-mana aktiviti bukan berkaitan ujian ini di luar skop kelas ujian unit mungkin membosankan jika tidak mustahil. Kejayaan pelaksanaan kelas ujian anda mungkin bergantung pada aktiviti ini, jadi JUnit menyediakan dua pasang anotasi untuk menangani masalah ini.





Anotasi @BeforeAll

Kelas ujian JUnit boleh mempunyai satu atau lebih kaedah ujian. Anotasi @BeforeAll memberi isyarat bahawa kaedah tertentu harus dilaksanakan sebelum semua kaedah ujian dalam kelas ujian. Kaedah yang dikaitkan dengan anotasi ini hanya dilaksanakan sekali (pada permulaan ujian) tanpa mengira bilangan kaedah ujian dalam kelas ujian.





Sebarang kaedah yang menggunakan anotasi @BeforeAll mesti mengikut beberapa ketetapan. Kaedah ini mesti mempunyai jenis pengembalian yang tidak sah, mestilah awam dan tidak boleh peribadi. Anotasi @BeforeAll sesuai untuk mewujudkan a sambungan ke pangkalan data atau mencipta fail baharu. Artikel ini menggunakan kelas ujian kalkulator untuk menunjukkan cara anda boleh menggunakan anotasi @BeforeAll.

Kelas Kalkulator

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

Kelas Ujian Kalkulator

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

Dalam kelas ini, anotasi @BeforeAll berfungsi dengan kaedah powerOnCalculator(), yang mencetak 'Kalkulator dihidupkan' sebelum sebarang ujian dijalankan. Pelaksanaan ujian yang berjaya mencetak laporan ujian berikut:



  SebelumSemua laporan anotasi

Seperti yang anda lihat kaedah yang dikaitkan dengan anotasi @BeforeAll tidak muncul dalam laporan ujian. Walau bagaimanapun, jika terdapat ralat dalam kaedah anotasi @BeforeAll, keputusan laporan ujian akan menunjukkan ini dengan kegagalan.

Anotasi @BeforeEach

Seperti kaedah beranotasi @BeforeAll, kaedah beranotasi @BeforeEach tidak akan muncul dalam laporan ujian. Kaedah beranotasi @BeforeEach dilaksanakan sebelum setiap kaedah ujian dalam kelas ujian. Jadi, jika kelas ujian mengandungi dua kaedah ujian, maka anotasi @BeforeEach akan dilaksanakan dua kali.





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

Menambah anotasi @BeforeEach pada kelas CalculatorTest menghasilkan output berikut:

  BeforeSetiap output anotasi

Kaedah yang dikaitkan dengan anotasi @BeforeEach dilaksanakan empat kali, sekali sebelum setiap kaedah ujian. Anda harus ambil perhatian bahawa kaedah @BeforeEach tidak statik, mempunyai jenis pulangan kosong dan bukan peribadi, kerana ini adalah ketetapan wajib. Ia juga penting untuk ambil perhatian bahawa kaedah yang dikaitkan dengan anotasi @BeforeEach dijalankan selepas kaedah @BeforeAll.





Anotasi @AfterAll

Kaedah dengan Anotasi @AfterAll akan dilaksanakan selepas semua kaedah ujian dalam kelas ujian menyelesaikan pelaksanaannya. Anotasi @AfterAll sesuai untuk operasi fail asas , seperti menutup fail atau memutuskan sambungan daripada pangkalan data. Anotasi @AfterAll ialah rakan sejawat dengan anotasi @BeforeAll. Seperti anotasi @BeforeAll, anotasi @AfterAll mestilah statik, mesti kembali terbatal dan kebanyakannya bukan peribadi.

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

Menambah kaedah beranotasi @AfterAll pada kelas CalculatorTest sedia ada mencetak output berikut ke konsol:

cara menyekat e-mel di iphone
  Output anotasi AfterAll

Ambil perhatian bahawa kaedah powerOffCalculator(), yang menggunakan anotasi @AfterAll, mencetak pada penghujung kelas ujian, selepas semua kaedah ujian dilaksanakan.

Anotasi @AfterEach

Anotasi @AfterEach ialah rakan sejawat dengan anotasi @BeforeEach. Mereka mempunyai ketetapan mandatori yang sama, yang berbeza sedikit daripada anotasi @BeforeAll dan @AfterAll. Apa yang membezakan anotasi @AfterEach daripada anotasi @BeforeEach (selain daripada nama mereka) ialah kaedah @AfterEach dijalankan selepas setiap kaedah ujian.

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

Melaksanakan kelas CalculatorTest mencetak output berikut ke konsol:

  SelepasSetiap output anotasi

Output menunjukkan bahawa kaedah yang dikaitkan dengan anotasi @AfterEach (returnResults) mencetak empat kali. Setiap pelaksanaan kaedah returnResults() hanya berlaku selepas pelaksanaan setiap ujian unit. Ini terbukti dengan fakta bahawa output kaedah returnResults() muncul selepas setiap output daripada kaedah yang dikaitkan dengan anotasi @BeforeEach.

Gilap Suite Ujian Anda Menggunakan Anotasi

JUnit membolehkan anda mengendalikan proses yang tidak berkaitan dengan ujian menggunakan anotasi pasangan sebelum dan selepas. Empat anotasi ini tergolong dalam senarai beberapa anotasi lain yang menambah nilai pada ujian anda. Satu lagi anotasi JUnit ialah @DisplayName.

Dua contoh kod yang memaparkan kelas CalculatorTest yang lengkap menggunakan anotasi @DisplayName. Anotasi @DisplayName membantu anda mencipta nama yang lebih bermakna untuk kelas ujian dan kaedah ujian anda.