Cara Menggunakan Anotasi @Before dan @After di JUnit

Cara Menggunakan Anotasi @Before dan @After di JUnit

Saat Anda menulis suite pengujian unit, mungkin ada beberapa aktivitas yang tidak terkait dengan pengujian yang perlu Anda lakukan. Kegiatan ini bisa berbentuk apa saja. Anda mungkin perlu menyambungkan ke database atau mengumpulkan sumber daya sebelum melakukan pengujian. Setelah setiap kasus pengujian dijalankan, Anda mungkin perlu melepaskan beberapa sumber daya.





VIDEO MAKEUSEOF HARI INI

Melakukan salah satu aktivitas yang tidak terkait dengan tes ini di luar ruang lingkup kelas tes unit mungkin membosankan jika bukan tidak mungkin. Keberhasilan eksekusi kelas pengujian Anda mungkin bergantung pada aktivitas ini, jadi JUnit menyediakan dua pasang anotasi untuk mengatasi masalah ini.





cara merekam audio di chrome

Anotasi @SebelumSemua

Kelas pengujian JUnit dapat memiliki satu atau beberapa metode pengujian. Anotasi @BeforeAll memberi sinyal bahwa metode tertentu harus dijalankan sebelum semua metode pengujian di kelas pengujian. Metode yang terkait dengan anotasi ini hanya dijalankan sekali (di awal pengujian) terlepas dari jumlah metode pengujian di kelas pengujian.





Metode apa pun yang menggunakan anotasi @BeforeAll harus mengikuti beberapa ketentuan. Metode ini harus memiliki tipe pengembalian batal, harus publik, dan tidak boleh pribadi. Anotasi @BeforeAll sangat ideal untuk membuat a koneksi ke database atau membuat file baru. Artikel ini menggunakan kelas pengujian kalkulator untuk menunjukkan bagaimana Anda dapat 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 Tes 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));
}
}

Di kelas ini, anotasi @BeforeAll bekerja dengan metode powerOnCalculator(), yang mencetak 'Kalkulator aktif' sebelum uji coba apa pun. Eksekusi pengujian yang berhasil mencetak laporan pengujian berikut:



  SebelumSemua laporan anotasi

Seperti yang Anda lihat, metode yang terkait dengan anotasi @BeforeAll tidak muncul dalam laporan pengujian. Namun, jika ada kesalahan dalam metode anotasi @BeforeAll, hasil laporan pengujian akan menunjukkan kesalahan ini.

Anotasi @BeforeEach

Seperti metode beranotasi @BeforeAll, metode beranotasi @BeforeEach tidak akan muncul dalam laporan pengujian. Metode beranotasi @BeforeEach dijalankan sebelum setiap metode pengujian di kelas pengujian. Jadi, jika kelas pengujian berisi dua metode pengujian, maka anotasi @BeforeEach akan dijalankan 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));
}
}

Menambahkan anotasi @BeforeEach ke kelas CalculatorTest menghasilkan output berikut:

  Sebelum Setiap output anotasi

Metode yang terkait dengan anotasi @BeforeEach dijalankan empat kali, satu kali sebelum setiap metode pengujian. Anda harus mencatat bahwa metode @BeforeEach tidak statis, memiliki tipe pengembalian batal, dan tidak pribadi, karena ini adalah ketentuan wajib. Penting juga untuk dicatat bahwa metode yang terkait dengan anotasi @BeforeEach berjalan setelah metode @BeforeAll.





Anotasi @AfterAll

Metode dengan Anotasi @AfterAll akan dijalankan setelah semua metode pengujian di kelas pengujian menyelesaikan eksekusinya. Anotasi @AfterAll sangat ideal untuk operasi file dasar , seperti menutup file, atau memutuskan sambungan dari database. Anotasi @AfterAll adalah padanan dari anotasi @BeforeAll. Seperti anotasi @BeforeAll, anotasi @AfterAll harus statis, harus mengembalikan void, dan banyak yang tidak bersifat pribadi.

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

Menambahkan metode beranotasi @AfterAll ke kelas CalculatorTest yang ada akan mencetak output berikut ke konsol:

  Keluaran anotasi AfterAll

Perhatikan bahwa metode powerOffCalculator() , yang menggunakan anotasi @AfterAll, dicetak di akhir kelas pengujian, setelah semua metode pengujian dijalankan.

Anotasi @AfterEach

Anotasi @AfterEach adalah padanan dari anotasi @BeforeEach. Mereka memiliki ketentuan wajib yang sama, yang sedikit berbeda dari anotasi @BeforeAll dan @AfterAll. Yang membedakan anotasi @AfterEach dari anotasi @BeforeEach (selain namanya) adalah bahwa metode @AfterEach berjalan setelah setiap metode pengujian.

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

Menjalankan kelas CalculatorTest mencetak output berikut ke konsol:

  Setelah Setiap output anotasi

Outputnya menunjukkan bahwa metode yang terkait dengan anotasi @AfterEach (returnResults) dicetak empat kali. Setiap eksekusi metode returnResults() hanya terjadi setelah eksekusi setiap unit test. Ini terbukti dengan fakta bahwa output metode returnResults() muncul setelah setiap output dari metode yang terkait dengan anotasi @BeforeEach.

Poles Test Suite Anda Menggunakan Anotasi

JUnit memungkinkan Anda untuk menangani proses terkait non-pengujian menggunakan anotasi pasangan sebelum dan sesudah. Keempat anotasi ini termasuk dalam daftar beberapa anotasi lain yang menambah nilai pada pengujian Anda. Anotasi JUnit lainnya adalah @DisplayName.

bagaimana cara menemukan alamat ip printer saya?

Dua contoh kode yang menampilkan kelas CalculatorTest lengkap menggunakan anotasi @DisplayName. Anotasi @DisplayName membantu Anda membuat nama yang lebih bermakna untuk kelas pengujian dan metode pengujian Anda.