JUnit Tutorial Anotasi dengan Contoh: Apa itu @Test dan @After

โšก Ringkasan Cerdas

JUnit Anotasi adalah bentuk metadata sintaksis yang ditambahkan ke Java kode sumber sehingga pelaksana pengujian mengetahui metode mana yang harus dieksekusi, kapan harus menjalankannya, dan berapa lama masing-masing metode akan berlangsung.

  • ๐Ÿ”˜ @Tes: Menandai metode void publik yang JUnit dieksekusi sebagai satu kasus uji tunggal.
  • โ˜‘๏ธ Lingkaran kehidupan: @Before dan @After membungkus setiap pengujian, sedangkan @BeforeClass dan @AfterClass membungkus kelas tersebut.
  • โœ… Kontrol: @Ignore melewati sebuah pengujian, @Test(timeout) membatasi waktu eksekusi, @Test(expected) menegaskan pengecualian yang dilemparkan.
  • ๐Ÿงช Pernyataan: org.junit.Assert menyediakan assertEquals, assertTrue, assertNull, assertSame dan fail().
  • ๏ธ Warisan: TestCase, TestResult, dan TestSuite termasuk dalam paket junit.framework versi lama.
  • ๐Ÿ“Š JUnit 5: Jupiter mengubah nama-nama ini menjadi @BeforeEach, @AfterEach, @BeforeAll, @AfterAll, dan @Disabled.

JUnit Tutorial anotasi yang mencakup @Test, @Before, dan @After.

Apa itu JUnit Anotasi?

JUnit penjelasan merupakan bentuk khusus dari metadata sintaksis yang dapat ditambahkan ke Java Kode sumber untuk keterbacaan dan struktur kode yang lebih baik. Variabel, parameter, paket, metode, dan kelas dapat diberi anotasi. Anotasi diperkenalkan pada JUnit 4, yang menjadikan Java Kode menjadi lebih mudah dibaca dan disederhanakan. Inilah perbedaan besar antara JUnit 3 dan JUnit 4: JUnit 4 berbasis anotasi.

Dengan pemahaman yang baik tentang anotasi ini, seseorang dapat dengan mudah mempelajari dan mengimplementasikan JUnit tes. Di bawah ini adalah yang penting dan sering digunakan JUnit daftar anotasi, dengan JUnit 5 (Jupiter) yang setara di samping masing-masing:

S.No. Penjelasan Deskripsi JUnit Setara dengan 5
1. @Uji Anotasi ini merupakan pengganti dari junit.framework.TestCase, dan menunjukkan bahwa metode void publik yang dilampirkan padanya dapat dieksekusi sebagai kasus uji. @Test (org.junit.jupiter.api)
2. @Sebelum Anotasi ini digunakan jika Anda ingin menjalankan beberapa pernyataan seperti prasyarat sebelum setiap kasus uji. @SebelumSetiap
3. @Sebelum kelas Anotasi ini digunakan jika Anda ingin mengeksekusi beberapa pernyataan sebelum semua kasus uji, misalnya koneksi uji yang harus dibuka sebelum semua kasus uji. @SebelumSemua
4. @Setelah Anotasi ini dapat digunakan jika Anda ingin mengeksekusi beberapa pernyataan setelahnya Uji Kasusmisalnya mengatur ulang variabel atau menghapus file sementara. @SetelahSetiap
5. @Afterlass Anotasi ini dapat digunakan jika Anda ingin mengeksekusi beberapa pernyataan setelah semua kasus uji, misalnya melepaskan sumber daya setelah mengeksekusi semua kasus uji. @SetelahSemua
6. @Mengabaikan Anotasi ini dapat digunakan jika Anda ingin mengabaikan beberapa pernyataan selama eksekusi pengujian, misalnya menonaktifkan beberapa kasus uji selama eksekusi pengujian. @Dengan disabilitas
7. @Tes(batas waktu=500) Anotasi ini dapat digunakan jika Anda ingin menetapkan batas waktu selama eksekusi pengujian, misalnya jika Anda bekerja di bawah SLA (perjanjian tingkat layanan) dan pengujian perlu diselesaikan dalam waktu yang ditentukan. @Timeout atau assertTimeout
8. @Test(diharapkan=IllegalArgumentException.kelas) Anotasi ini dapat digunakan jika Anda ingin menangani pengecualian tertentu selama eksekusi pengujian. Misalnya, jika Anda ingin memeriksa apakah metode tertentu melempar pengecualian tertentu atau tidak. assertThrows

JUnit Contoh Anotasi

Mari kita buat kelas yang membahas hal-hal penting JUnit anotasi dengan pernyataan print sederhana dan jalankan dengan kelas test runner:

Langkah 1) Pertimbangkan hal-hal berikut ini Java Kelas yang memiliki berbagai metode yang terhubung dengan anotasi yang tercantum di atas:

JunitAnnotationsExample.java

package guru99.junit;		

import static org.junit.Assert.assertEquals;				
import static org.junit.Assert.assertFalse;				

import java.util.ArrayList;		

import org.junit.After;		
import org.junit.AfterClass;		
import org.junit.Before;		
import org.junit.BeforeClass;		
import org.junit.Ignore;		
import org.junit.Test;		

public class JunitAnnotationsExample {				

    private ArrayList<String> list;					

    @BeforeClass		
    public static void m1() {							
        System.out.println("Using @BeforeClass , executed before all test cases ");					
    }		

    @Before		
    public void m2() {					
        list = new ArrayList<String>();					
        System.out.println("Using @Before annotations ,executed before each test cases ");					
    }		

    @AfterClass		
    public static void m3() {							
        System.out.println("Using @AfterClass ,executed after all test cases");					
    }		

    @After		
    public void m4() {					
        list.clear();			
        System.out.println("Using @After ,executed after each test cases");					
    }		

    @Test		
    public void m5() {					
        list.add("test");					
        assertFalse(list.isEmpty());			
        assertEquals(1, list.size());			
    }		

    @Ignore		
    public void m6() {					
        System.out.println("Using @Ignore , this execution is ignored");					
    }		

    @Test(timeout = 10)			
    public void m7() {					
        System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case");					
    }		

    @Test(expected = NoSuchMethodException.class)					
    public void m8() {					
        System.out.println("Using @Test(expected) ,it will check for specified exception during its execution");					

    }		

}		

Langkah 2) Mari kita buat kelas test runner untuk menjalankan pengujian di atas:

TestRunner.java

package guru99.junit;		

import org.junit.runner.JUnitCore;		
import org.junit.runner.Result;		
import org.junit.runner.notification.Failure;		

public class TestRunner {				
			public static void main(String[] args) {									
      Result result = JUnitCore.runClasses(JunitAnnotationsExample.class);					
			for (Failure failure : result.getFailures()) {							
         System.out.println(failure.toString());					
      }		
      System.out.println("Result=="+result.wasSuccessful());							
   }		
}      	

Hasil yang diharapkan

  • Semua kasus uji akan dieksekusi satu per satu, dan semua pernyataan cetak dapat dilihat di konsol.
  • Seperti yang dibahas pada tabel di atas, @Before dan @BeforeClass dalam JUnit [ Metode m2() dan m1() ] akan dieksekusi sebelum setiap kasus uji dan sebelum semua kasus uji.
  • Dengan cara yang sama @After dan @AfterClass di JUnit (Metode m4() dan m3()) akan dieksekusi setelah setiap kasus uji dan setelah semua kasus uji secara berturut-turut. @Ignore (metode m6()) akan diperlakukan sebagai mengabaikan pengujian.

Mari kita analisis kasus uji yang digunakan di atas. Java Kelas secara detail:

  1. Perhatikan metode m5() seperti yang diberikan di bawah ini:
	@Test		
    public void m5() {					
        list.add("test");					
        assertFalse(list.isEmpty());			
        assertEquals(1, list.size());			
    }		

Pada metode di atas, saat Anda menambahkan string ke variabel "list":

  • daftar.isEmpty() akan mengembalikan salah.
  • menegaskanFalse(daftar.isEmpty()) harus kembali benar.
  • Hasilnya, kasus uji akan terjadi lulus.

Karena Anda hanya menambahkan satu string ke dalam daftar, ukurannya adalah satu.

  • daftar.ukuran() harus mengembalikan nilai integer โ€œ1โ€.
  • So menegaskanEquals(1, daftar.ukuran()) harus kembali benar.
  • Hasilnya, kasus uji akan terjadi lulus.
  1. Perhatikan metode m7() seperti yang diberikan di bawah ini:
@Test(timeout = 10)		
    public void m7() {					
        System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case");					
    }		

Seperti yang dibahas di atas, @Tes(batas waktu = 10) digunakan untuk memberlakukan batas waktu dalam kasus uji. Nilainya dalam milidetik, jadi m7() harus selesai dalam waktu 10 ms.

  1. Perhatikan metode m8() seperti yang diberikan di bawah ini:
@Test(expected = NoSuchMethodException.class)				
    public void m8() {					
        System.out.println("Using @Test(expected) ,it will check for specified exception during its execution");					
    
    }		

Seperti yang dibahas di atas, @Tes(diharapkan) akan memeriksa pengecualian yang ditentukan selama eksekusinya, sehingga metode m8() akan melempar "No Such Method Exception". Akibatnya, pengujian akan dieksekusi dengan pengecualian.

Catatan akurasi: Fungsi m8() hanya mencetak satu baris, sehingga pengecualian yang dideklarasikan sebenarnya tidak pernah dilemparkan dan JUnit 4 melaporkan pengujian gagal. Sesuaikan tipe yang diharapkan dengan apa yang sebenarnya dilemparkan oleh metode tersebut. JUnit 5 menulis ini dengan assertThrows.

Ketika semua kasus uji dilewati, maka eksekusi pengujian berhasil.

Hasil Aktual

Karena terdapat tiga kasus uji pada contoh di atas, semua kasus uji akan dieksekusi satu per satu. Lihat tangkapan layar konsol di bawah ini:

Eclipse Output konsol yang menampilkan pernyataan print @BeforeClass, @Before, @After, dan @AfterClass.
Output konsol yang dihasilkan oleh JunitAnnotationsExample

Lihat pernyataan cetak di bawah ini yang dapat dilihat di konsol:

Menggunakan @BeforeClass , dieksekusi sebelum semua kasus uji

Menggunakan anotasi @Before, dieksekusi sebelum setiap kasus pengujian

Menggunakan @After, dieksekusi setelah setiap kasus uji

Menggunakan anotasi @Before, dieksekusi sebelum setiap kasus pengujian

Menggunakan @Test(timeout), ini dapat digunakan untuk menerapkan batas waktu JUnit4 kasus uji

Menggunakan @After, dieksekusi setelah setiap kasus uji

Menggunakan anotasi @Before, dieksekusi sebelum setiap kasus pengujian

Menggunakan @Test(expected) , ia akan memeriksa pengecualian yang ditentukan selama eksekusinya

Menggunakan @After, dieksekusi setelah setiap kasus uji

Menggunakan @AfterClass, dieksekusi setelah semua kasus uji

JUnit Kelas Tegas

Anotasi menentukan kapan suatu metode dijalankan; metode assert menentukan apakah metode tersebut berhasil atau tidak.

Kelas ini menyediakan sejumlah metode pernyataan (assertion) yang berguna dalam menulis kasus uji. Jika semua pernyataan assert berhasil, hasil pengujian sukses. Jika ada pernyataan assert yang gagal, hasil pengujian gagal. Kelas ini menyediakan metode pernyataan assert yang khusus. JUnit menegaskan Tutorial ini membahas setiap metode secara mendalam.

Seperti yang telah Anda lihat sebelumnya, tabel di bawah ini menjelaskan metode Assert yang penting dan deskripsinya:

S.No. metode Deskripsi
1. void menegaskanEquals (boolean yang diharapkan, boolean aktual) Fungsi ini memeriksa apakah dua nilai sama, mirip dengan metode equals pada kelas Object.
2. batal menegaskanFalse(kondisi boolean) Fungsinya adalah untuk memeriksa apakah suatu kondisi bernilai salah.
3. void menegaskanNotNull(Objek objek) Fungsionalitas โ€œassertNotNullโ€ adalah untuk memeriksa apakah suatu objek bukan null.
4. void menegaskanNull(Objek objek) Fungsionalitas โ€œassertNullโ€ adalah untuk memeriksa apakah suatu objek adalah null.
5. batal menegaskanTrue(kondisi boolean) Fungsi โ€œassertTrueโ€ adalah untuk memeriksa apakah suatu kondisi benar.
6. batal gagal() Jika Anda ingin melempar kesalahan pernyataan (assertion error), fail() selalu menghasilkan putusan gagal (fail).
7. void menegaskanSame([String pesan] Fungsionalitas โ€œassertSameโ€ adalah untuk memeriksa apakah kedua objek merujuk ke objek yang sama.
8. void menegaskanNotSame([String pesan] Fungsionalitas โ€œassertNotSameโ€ adalah untuk memeriksa bahwa kedua objek tidak merujuk ke objek yang sama.

JUnit Kelas Kasus Uji

Untuk menjalankan beberapa pengujian, kelas TestCase tersedia di kerangka kerja junit paket. Anotasi @Test memberi tahu JUnit bahwa metode public void ini (sebagai contoh kasus uji) yang terlampir padanya dapat dijalankan sebagai kasus uji.

Catatan versi: Kasus cobaan, Hasil tes ke TestSuite menjadi bagian dari warisan kerangka kerja junit paket dari JUnit 3. Tes-tes tersebut masih disertakan dalam artefak JUnit 4.x, tetapi tes berbasis anotasi tidak memperluas TestCase.

Tabel di bawah ini menunjukkan beberapa metode penting yang tersedia di junit.framework.TestCase kelas:

S.No. metode Deskripsi
1. int hitunganKasusUji() Metode ini digunakan untuk menghitung berapa banyak kasus uji yang dieksekusi oleh lari (Hasil Tes tr) Metode.
2. Hasil Tes buatHasil() Metode ini digunakan untuk membuat a Hasil tes obyek.
3. String getName () Metode ini mengembalikan string yang tidak lain hanyalah a Kasus cobaan Nama.
4. Jalankan Hasil Tes() Metode ini digunakan untuk menjalankan pengujian, yang mengembalikan sebuah Hasil tes obyek.
5. batal dijalankan (hasil Tes) Metode ini digunakan untuk menjalankan tes yang memiliki a Hasil tes objek, yang tidak mengembalikan apa pun.
6. void setName (Nama string) Metode ini digunakan untuk mengatur nama sebuah Kasus cobaan.
7. batalkan pengaturan() Metode ini digunakan untuk menulis kode asosiasi sumber daya, misalnya membuat koneksi basis data.
8. batalkan pembongkaran() Metode ini digunakan untuk menulis kode pelepasan sumber daya, misalnya melepaskan koneksi basis data setelah melakukan operasi transaksi.

JUnit Kelas Hasil Tes

Saat Anda menjalankan pengujian, pengujian tersebut akan mengembalikan hasil (dalam bentuk Hasil tes (objek). Objek TestResult ini dapat digunakan untuk menganalisis objek hasil. Hasil pengujian ini bisa berupa kegagalan atau keberhasilan.

Lihat tabel di bawah ini untuk metode-metode penting yang digunakan dalam kelas junit.framework.TestResult:

S.No. metode Deskripsi
1. void addError(Uji uji, T yang dapat dilempar) Metode ini digunakan jika Anda perlu menambahkan kesalahan pada pengujian.
2. void addFailure(Uji uji, AssertionFailedError t) Metode ini digunakan jika Anda perlu menambahkan kegagalan ke daftar kegagalan.
3. void endTest(Tes tes) Metode ini digunakan untuk memberitahukan bahwa suatu pengujian telah dilakukan (selesai).
4. int jumlah kesalahan() Metode ini digunakan untuk mendapatkan kesalahan yang terdeteksi selama eksekusi pengujian.
5. Pencacahan kesalahan() Metode ini hanya mengembalikan kumpulan (dalam hal ini sebuah Enumerasi) kesalahan.
6. int jumlah kegagalan() Metode ini digunakan untuk mendapatkan jumlah kegagalan yang terdeteksi selama eksekusi pengujian.
7. batal dijalankan (tes TestCase) Metode ini digunakan untuk mengeksekusi kasus uji.
8. ke dalam runCount() Metode ini hanya menghitung jumlah tes yang dijalankan.
9. batalkan startTest(Tes tes) Metode ini digunakan untuk memberitahukan bahwa tes dimulai.
10. batal berhenti() Metode ini digunakan untuk menghentikan jalankan pengujian.

JUnit Kelas Rangkaian Tes

Jika Anda ingin menjalankan beberapa pengujian dalam urutan tertentu, hal itu dapat dilakukan dengan menggabungkan semua pengujian di satu tempat. Tempat ini disebut rangkaian pengujian (test suite), dan JUnit rangkaian pengujian Tutorial ini menjelaskan contoh lengkapnya.

Lihat tabel di bawah ini untuk metode-metode penting yang digunakan dalam junit.framework.TestSuite kelas:

S.No. metode Deskripsi
1. batal addTest(Tes tes) Metode ini digunakan jika Anda ingin menambahkan tes ke suite.
2. batal addTestSuite(Kelas kelas tes) Metode ini digunakan jika Anda ingin menentukan kelas sambil menambahkan tes ke suite.
3. int hitunganKasusUji() Cara ini digunakan jika ingin menghitung jumlah kasus uji.
4. String getName () Metode ini digunakan untuk mendapatkan nama test suite.
5. batal dijalankan (hasil Tes) Metode ini digunakan untuk menjalankan pengujian dan mengumpulkan hasil pengujian dalam sebuah Hasil tes obyek.
6. void setName (Nama string) Metode ini digunakan untuk mengatur nama dari TestSuite.
7. Uji testAt(indeks int) Metode ini digunakan jika Anda ingin mengembalikan hasil pengujian pada indeks tertentu.
8. ke dalam jumlah tes() Metode ini digunakan jika Anda ingin mengembalikan jumlah pengujian dalam rangkaian pengujian.
9. peringatan Tes statis (Pesan string) Metode ini mengembalikan pengujian yang gagal dan mencatat pesan peringatan.

Pertanyaan Umum Demo Slot

Ya. Suatu metode biasanya menyertakan @Test bersama dengan @Ignore, atau @Test dengan batas waktu dan pengecualian yang diharapkan. Anda tidak dapat menggabungkan dua anotasi siklus hidup, seperti @Before dan @After, pada satu metode.

@Ignore hanya menekan sebuah metode JUnit sudah dikenali sebagai sebuah pengujian. Tanpa @Test di sampingnya, runner tidak akan pernah mengumpulkan metode tersebut, sehingga metode tersebut tidak dijalankan maupun tercantum sebagai yang dilewati.

JUnit Metode ini dijalankan pada thread terpisah dan gagal dengan TestTimedOutException setelah anggaran habis. Thread tersebut diinterupsi, bukan dihentikan, sehingga panggilan pemblokiran dapat terus berjalan.

Hanya melalui mesin vintage. Menambahkan junit-vintage-engine memungkinkan JUnit Platform menjalankan tes org.junit yang ada tanpa perubahan, tetapi tes Jupiter harus mengimpor org.junit.jupiter.api. Mencampur kedua set impor dalam satu kelas akan gagal.

Hanya untuk pemeliharaan. Rangkaian pengujian lama yang memperluas TestCase dan membangun objek TestSuite masih umum di basis kode lama, jadi mengenali API sangat membantu. Pengujian baru harus berbasis anotasi.

JUnit Membangun instance baru dari kelas pengujian untuk setiap metode pengujian, sehingga tidak ada instance yang ada ketika pengaturan tingkat kelas harus dijalankan. Metode statis tidak memerlukan instance, dan JUnit menolak deklarasi non-statis.

Asisten AI membaca metode yang sedang diuji dan menyarankan apakah setup termasuk dalam @Before atau @BeforeClass, dan apakah jalur kegagalan memerlukan @Test(expected) atau assertThrows. Perlakukan setiap saran sebagai draf.

Kopilot GitHub Biasanya menempatkan pengaturan dan pembongkaran dengan benar, tetapi seringkali tercampur. JUnit 4 dan impor Jupiter dalam satu file. Periksa blok impor sebelum menjalankan rangkaian pengujian.

Ringkaslah postingan ini dengan: