OK, jadi @Ignore
penjelasannya bagus untuk menandai bahwa test case tidak boleh dijalankan.
Namun, terkadang saya ingin mengabaikan tes berdasarkan informasi runtime. Contohnya adalah jika saya memiliki tes konkurensi yang perlu dijalankan pada mesin dengan sejumlah inti. Jika tes ini dijalankan pada mesin uniprocessor, saya tidak berpikir itu benar untuk hanya lulus tes (karena belum dijalankan), dan tentu saja tidak akan benar untuk gagal dalam tes dan merusak build .
Jadi saya ingin dapat mengabaikan tes saat runtime, karena ini sepertinya hasil yang tepat (karena kerangka uji akan memungkinkan build untuk lulus tetapi catat bahwa tes tidak berjalan). Saya cukup yakin bahwa anotasi tidak akan memberikan saya fleksibilitas ini, dan curiga bahwa saya perlu membuat test suite secara manual untuk kelas yang bersangkutan. Namun, dokumentasi tidak menyebutkan apa-apa tentang ini dan melihat melalui API juga tidak jelas bagaimana hal ini akan dilakukan secara terprogram (yaitu bagaimana saya membuat program secara terprogram Test
atau serupa yang setara dengan yang dibuat oleh @Ignore
anotasi?).
Jika ada yang pernah melakukan hal serupa di masa lalu, atau memiliki ide cemerlang tentang bagaimana lagi saya bisa melakukan ini, saya akan senang mendengarnya.
sumber
@BeforeClass
anotasi, di mana Anda dapat membuat asumsi Anda gagal di sana, yang akan melewati seluruh kelas. Lain adalah@ClassRule
(untuk kontrol berbutir halus, tetapi seluruh kelas, satu kali).Anda harus checkout
Junit-ext
proyek. Mereka memilikiRunIf
anotasi yang melakukan tes bersyarat, seperti:[Contoh kode diambil dari tutorial mereka]
sumber
Assume
langsung menggunakannya agar tidak memperkenalkan ketergantungan lain.@RunIf
memisahkan kondisi saat tes harus dijalankan dari kode tes yang sebenarnya, yang menurut saya bagus. Yang tidak saya sukai adalah itu membutuhkan pelari ujian khusus. Oleh karena itu saya menulis aturan JUnit untuk mengabaikan tes secara kondisional.Di JUnit 4, opsi lain untuk Anda mungkin adalah membuat anotasi untuk menyatakan bahwa tes tersebut harus memenuhi kriteria khusus Anda, lalu perpanjang pelari default dengan milik Anda sendiri dan menggunakan refleksi, buat keputusan berdasarkan kriteria khusus. Mungkin terlihat seperti ini:
sumber
BlockJUnit4ClassRunner
tidak menawarkanisIgnored
metode lagi.Catatan singkat:
Assume.assumeTrue(condition)
mengabaikan langkah-langkah selanjutnya tetapi lulus ujian. Untuk gagal tes, gunakanorg.junit.Assert.fail()
di dalam pernyataan bersyarat. Bekerja sama sepertiAssume.assumeTrue()
tetapi gagal tes.sumber