Tutorial Anotasi JUnit dengan Contoh

Isi kandungan:

Anonim

Apa itu Anotasi JUnit?

JUNIT ANNOTATIONS adalah bentuk meta-data sintaksis khas yang dapat ditambahkan ke kod sumber Java untuk pembacaan dan struktur kod yang lebih baik. Pemboleh ubah, parameter, pakej, kaedah dan kelas dapat dijelaskan. Anotasi diperkenalkan pada Junit4, yang menjadikan kod Java lebih mudah dibaca dan mudah. Ini adalah perbezaan besar antara Junit3 dan Junit4 bahawa Junit4 berdasarkan anotasi.

Dengan pengetahuan anotasi pada Junit5, seseorang dapat dengan mudah belajar dan melaksanakan ujian JUnit. Berikut adalah senarai anotasi penting dan sering digunakan:

S.No. Anotasi Penerangan
1. @ Ujian Anotasi ini adalah penggantian org.junit.TestCase yang menunjukkan bahawa kaedah pengosongan awam yang dilampirkan dapat dilaksanakan sebagai Kes ujian.
2. @Sebelum ini Anotasi ini digunakan jika anda ingin melaksanakan beberapa pernyataan seperti prasyarat sebelum setiap kes ujian.
3. @BeforeClass Anotasi ini digunakan jika anda ingin melaksanakan beberapa pernyataan sebelum semua kes ujian misalnya, sambungan ujian mesti dilaksanakan sebelum semua kes ujian.
4. @Selepas Anotasi ini dapat digunakan jika anda ingin menjalankan beberapa pernyataan setelah setiap Uji Kes seperti misalnya menetapkan semula pemboleh ubah, menghapus fail sementara, pemboleh ubah, dll.
5. @Selepas kelas Anotasi ini dapat digunakan jika anda ingin melaksanakan beberapa pernyataan setelah semua kes ujian misalnya, Melepaskan sumber setelah melaksanakan semua kes ujian.
6. @ Abaikan Anotasi ini dapat digunakan jika anda ingin mengabaikan beberapa pernyataan semasa pelaksanaan ujian, misalnya melumpuhkan beberapa kes ujian semasa pelaksanaan ujian.
7. @Test (tamat masa = 500) Anotasi ini dapat digunakan jika anda ingin menetapkan waktu tunggu selama pelaksanaan ujian, misalnya jika anda bekerja di bawah beberapa SLA (Perjanjian tahap perkhidmatan), dan ujian perlu diselesaikan dalam waktu tertentu.
8. @Test (dijangka = IllegalArgumentException.class) Anotasi ini boleh digunakan jika anda ingin menangani beberapa pengecualian semasa pelaksanaan ujian. Sebagai contoh, jika anda ingin memeriksa sama ada kaedah tertentu membuang pengecualian yang ditentukan atau tidak.

Dalam tutorial ini, anda akan belajar-

  • Contoh Anotasi JUnit
  • Kelas JUnit Assert
  • Kelas Kes Ujian JUnit
  • Kelas JUnit TestResult
  • Kelas JUnit Test Suite

Contoh Anotasi JUnit

Mari buat kelas yang merangkumi anotasi JUnit penting dengan pernyataan cetak yang mudah dan laksanakan dengan kelas ujian pelari:

Langkah 1) Pertimbangkan kelas java di bawah yang mempunyai pelbagai kaedah yang dilampirkan pada anotasi yang disenaraikan di atas:

JunitAnnotationsExample.java

pakej guru99.junit;import org statik.junit.Assert.assertEquals;import org statik.junit.Assert.assertFalse;import java.util.ArrayList;import org.junit.Setelah;import org.junit.AfterClass;import org.junit.Sebelum;import org.junit.BeforeClass;import org.junit. Abaikan;import org.junit.Test;kelas awam JunitAnnotationsContoh {senarai ArrayList  peribadi;@BeforeClasskekosongan statik awam m1 () {System.out.println ("Menggunakan @BeforeClass, dilaksanakan sebelum semua kes ujian");}@Sebelum inikekosongan awam m2 () {list = ArrayList baru  ();System.out.println ("Menggunakan @Sebelum anotasi, dilaksanakan sebelum setiap kes ujian");}@Selepas kelaskekosongan statik awam m3 () {System.out.println ("Menggunakan @AfterClass, dilaksanakan setelah semua kes ujian");}@Selepaskekosongan awam m4 () {list.clear ();System.out.println ("Menggunakan @After, dilaksanakan selepas setiap kes ujian");}@ Ujiankekosongan awam m5 () {list.add ("ujian");assertFalse (list.isEmpty ());assertEquals (1, list.size ());}@Abaikekosongan awam m6 () {System.out.println ("Menggunakan @Ignore, pelaksanaan ini diabaikan");}@Test (tamat masa = 10)kekosongan awam m7 () {System.out.println ("Menggunakan @Test (timeout), ia boleh digunakan untuk menegakkan timeout dalam kes ujian JUnit4");}@Test (dijangka = NoSuchMethodException.class)kekosongan awam m8 () {System.out.println ("Menggunakan @Test (dijangka), ia akan memeriksa pengecualian yang ditentukan semasa pelaksanaannya");}}

Langkah 2) mari buat kelas pelari ujian untuk melaksanakan ujian di atas:

TestRunner.java

pakej guru99.junit;import org.junit.runner.JUnitCore;import org.junit.runner.Result;import org.junit.runner.notification.Failure;TestRunner kelas awam {utama kekosongan statik awam (String [] args) {Hasil keputusan = JUnitCore.runClasses (JunitAnnotationsExample.class);untuk (Kegagalan gagal: result.getFailures ()) {System.out.println (kegagalan.toString ());}System.out.println ("Hasil ==" + hasil.wasSukses ());}}

Hasil yang dijangkakan

  • Semua kes ujian akan dijalankan satu persatu, dan semua pernyataan cetak dapat dilihat pada konsol.
  • Seperti yang dibincangkan dalam jadual di atas @Sebelumnya, @BeforeClass [kaedah m1 () dan m2 ()] akan dilaksanakan sebelum masing-masing dan sebelum semua kes ujian masing-masing.
  • Dengan cara yang sama @ after, @ afterClass (kaedah m3 () dan m4 ()) akan dijalankan setelah masing-masing dan setelah semua kes ujian masing-masing. @ignore (kaedah m6 ()) akan dianggap mengabaikan ujian.

Mari kita analisis kes ujian yang digunakan di kelas java di atas secara terperinci:

  1. Pertimbangkan kaedah m5 () seperti yang diberikan di bawah:
@ Ujiankekosongan awam m5 () {list.add ("ujian");assertFalse (list.isEmpty ());assertEquals (1, list.size ());}

Dalam kaedah di atas kerana anda menambah rentetan dalam "senarai" pemboleh ubah

  • list.isEmpty () akan kembali palsu.
  • assertFalse (list.isEmpty ()) mesti kembali benar.
  • Kesannya, kes ujian akan lulus .

Oleh kerana anda hanya menambah satu rentetan dalam senarai, jadi ukurannya satu.

  • list.size () mesti mengembalikan nilai int sebagai "1".
  • Jadi assertEquals (1, list.size ()) mesti kembali benar.
  • Kesannya, kes ujian akan lulus .
  1. Pertimbangkan kaedah m7 () seperti yang diberikan di bawah:
@Test (tamat masa = 10)kekosongan awam m7 () {System.out.println ("Menggunakan @Test (timeout), ia boleh digunakan untuk menegakkan timeout dalam kes ujian JUnit4");}

Seperti yang dibincangkan di atas @Test (timeout = 10) anotasi digunakan untuk menegakkan timeout dalam kes ujian.

  1. Pertimbangkan kaedah m8 () seperti yang diberikan di bawah:
@Test (dijangka = NoSuchMethodException.class)kekosongan awam m8 () {System.out.println ("Menggunakan @Test (dijangka), ia akan memeriksa pengecualian yang ditentukan semasa pelaksanaannya");}

Seperti yang dibincangkan di atas @Test (diharapkan) akan memeriksa pengecualian yang ditentukan selama pelaksanaannya sehingga kaedah m8 () akan membuang "Tanpa Pengecualian Kaedah Seperti itu." Hasilnya, ujian akan dijalankan dengan pengecualian.

Oleh kerana semua kes ujian dilalui, ini menghasilkan pelaksanaan ujian yang berjaya.

Keputusan sebenar

Oleh kerana terdapat tiga kes ujian dalam contoh di atas, semua kes ujian akan dilaksanakan satu persatu. Lihat output di bawah :

Lihat pernyataan cetak di bawah yang dapat dilihat di konsol:

Menggunakan @BeforeClass, dilaksanakan sebelum semua kes ujian

Menggunakan anotasi @Sebelum, dilaksanakan sebelum setiap kes ujian

Menggunakan @After, dilaksanakan selepas setiap kes ujian

Menggunakan anotasi @Sebelum, dilaksanakan sebelum setiap kes ujian

Dengan menggunakan @Test (timeout), ia dapat digunakan untuk menegakkan timeout dalam case uji JUnit4

Menggunakan @After, dilaksanakan selepas setiap kes ujian

Menggunakan anotasi @Sebelum, dilaksanakan sebelum setiap kes ujian

Dengan menggunakan @Test (diharapkan), ia akan memeriksa pengecualian yang ditentukan semasa pelaksanaannya

Menggunakan @After, dilaksanakan selepas setiap kes ujian

Menggunakan @AfterClass, dilaksanakan setelah semua kes ujian

Kelas JUnit Assert

Kelas ini memberikan banyak kaedah penegasan yang berguna dalam menulis kes ujian. Sekiranya semua pernyataan tegas diluluskan, keputusan ujian berjaya. Sekiranya pernyataan penegasan gagal, keputusan ujian gagal.

Seperti yang anda lihat sebelumnya, jadual di bawah menerangkan kaedah dan penerangan Tegasan penting:

S.No. Kaedah Penerangan
1. vert assertEquals (boolean dijangka, boolean sebenar) Ia memeriksa sama ada dua nilai sama dengan kaedah sama dengan Objek kelas
2. batal tegas Salah (keadaan boolean) fungsi adalah untuk memeriksa bahawa keadaan itu salah.
3. void assertNotNull (Objek objek) Fungsi "assertNotNull" adalah untuk memeriksa bahawa objek tidak kosong.
4. void assertNull (Objek objek) Fungsi "assertNull" adalah untuk memeriksa bahawa objek itu kosong.
5. batal assertTrue (keadaan boolean) Fungsi "assertTrue" adalah untuk memeriksa bahawa keadaan itu benar.
6. batal gagal () Sekiranya anda ingin membuang kesilapan penegasan, anda gagal () yang selalu menghasilkan keputusan yang gagal.
7. batal assertSame ([Mesej rentetan] Fungsi "assertSame" adalah untuk memeriksa bahawa kedua-dua objek tersebut merujuk kepada objek yang sama.
8. batal assertNotSame ([Mesej rentetan] Fungsi "assertNotSame" adalah untuk memeriksa bahawa kedua-dua objek tersebut tidak merujuk kepada objek yang sama.

Kelas Kes Ujian JUnit

Untuk menjalankan pelbagai ujian, kelas TestCase boleh didapati dalam pakej org.junit.TestCase . Anotasi @Test memberitahu JUnit bahawa kaedah pembatalan awam ini (Uji Kes di sini) yang dilampirkan boleh dijalankan sebagai kes ujian.

Jadual di bawah menunjukkan beberapa kaedah penting yang terdapat di kelas org.junit.TestCase :

S.No. Kaedah Penerangan
1. int countTestCases () Kaedah ini digunakan untuk mengira berapa banyak kes ujian yang dijalankan dengan kaedah run (TestResult tr) .
2. TestResult createResult () Kaedah ini digunakan untuk membuat objek TestResult .
3. Rentetan getName () Kaedah ini mengembalikan rentetan yang tidak lain adalah TestCase .
4. Jalankan TestResult () Kaedah ini digunakan untuk melaksanakan ujian yang mengembalikan objek TestResult
5. larian tidak sah (keputusan TestResult) Kaedah ini digunakan untuk melaksanakan ujian yang mempunyai objek TestResult yang tidak mengembalikan apa-apa.
6. void setName (Nama rentetan) Kaedah ini digunakan untuk menetapkan nama TestCase.
7. batal setUp () Kaedah ini digunakan untuk menulis kod perkaitan sumber. cth Buat sambungan pangkalan data.
8. air mata kosong () Kaedah ini digunakan untuk menulis kod pelepasan sumber. cth Melepaskan sambungan pangkalan data setelah melakukan operasi transaksi.

Kelas JUnit TestResult

Apabila anda menjalankan ujian, ia mengembalikan hasil (dalam bentuk objek TestResult ). Objek TestResult ini dapat digunakan untuk menganalisis objek yang dihasilkan. Hasil ujian ini boleh menjadi kegagalan atau berjaya. Lihat jadual di bawah untuk kaedah penting yang digunakan dalam kelas org.junit.TestResult:
S.No. Kaedah Penerangan
1. void addError (Ujian ujian, Throwable t) Kaedah ini digunakan jika anda memerlukan menambahkan ralat pada ujian.
2. void addFailure (Ujian ujian, AssertionFailedError t) Kaedah ini digunakan jika anda memerlukan menambahkan kegagalan ke senarai kegagalan.
3. void endTest (Ujian ujian) Kaedah ini digunakan untuk memberitahu bahawa ujian dilakukan (selesai)
4. int errorCount () Kaedah ini digunakan untuk mendapatkan kesalahan yang dikesan semasa pelaksanaan ujian.
5. Kesalahan penghitungan () Kaedah ini hanya mengembalikan koleksi ralat (Penghitungan di sini).
6. int kegagalanCount () Kaedah ini digunakan untuk mendapatkan jumlah kesalahan yang dikesan semasa pelaksanaan ujian.
7. larian tidak sah (TestCase test) Kaedah ini digunakan untuk melaksanakan kes ujian.
8. int runCount () Kaedah ini hanya mengira ujian yang dilaksanakan.
9. batal startTest (Ujian ujian) Kaedah ini digunakan untuk memberitahu bahawa ujian dimulakan.
10. berhenti kosong () Kaedah ini digunakan untuk menguji larian untuk dihentikan.

Kelas JUnit Test Suite

Sekiranya anda ingin menjalankan beberapa ujian dalam urutan yang ditentukan, ini dapat dilakukan dengan menggabungkan semua ujian di satu tempat. Tempat ini dipanggil sebagai suite ujian.

Lihat jadual di bawah untuk kaedah penting yang digunakan dalam kelas org.junit.TestSuite :

S.No. Kaedah Penerangan
1. batal addTest (Ujian ujian) Kaedah ini digunakan jika anda ingin menambahkan ujian ke suite.
2. batal addTestSuite (Kelas testClass) Kaedah ini digunakan jika anda ingin menentukan kelas sambil menambahkan ujian ke suite.
3. int countTestCases () Kaedah ini digunakan jika anda ingin mengira jumlah kes ujian.
4. Rentetan getName () Kaedah ini digunakan untuk mendapatkan nama suite ujian.
5. larian tidak sah (keputusan TestResult) Kaedah ini digunakan untuk melaksanakan ujian dan mengumpulkan hasil ujian pada objek TestResult .
6. void setName (Nama rentetan) Kaedah ini digunakan untuk menetapkan nama TestSuite .
7. Uji ujianAt (indeks int) Kaedah ini digunakan jika anda ingin mengembalikan ujian pada indeks yang diberikan.
8. ujian intCount () Kaedah ini digunakan jika anda ingin mengembalikan sejumlah ujian di Suite.
9. amaran Ujian statik (Mesej rentetan) Kaedah ini mengembalikan ujian yang akan gagal dan mencatat mesej amaran.

Ringkasan:

  • JUnit menyediakan API mudah alih, yang menyediakan semua kelas dan anotasi penting yang berguna dalam menulis ujian unit.
  • Kelas yang sangat berguna semasa menulis kes ujian
    • org.junit.Assert
    • org.junit.TestCase
    • org.junit.TestResult
    • org.junit.TestSuite
  • senarai anotasi penting dan kerap digunakan

    @Sebelum ini

    @BeforeClass

    @Selepas

    @Selepas kelas

    @ Ujian

    @Abai