Saya telah beralih ke JUnit4.4 dari JUnit3.8. Saya menjalankan tes saya menggunakan ant, semua tes saya berjalan dengan sukses tetapi kelas utilitas tes gagal dengan kesalahan "Tidak ada metode yang dapat dijalankan". Pola yang saya gunakan adalah memasukkan semua kelas dengan nama * Test * di bawah folder uji.
Saya memahami bahwa pelari tidak dapat menemukan metode apa pun yang dianotasi dengan atribut @Test. Tapi mereka tidak mengandung anotasi seperti itu karena kelas-kelas ini bukan tes. Anehnya saat menjalankan tes ini di gerhana, tidak ada keluhan tentang kelas-kelas ini.
Di JUnit3.8 itu sama sekali bukan masalah karena kelas utilitas ini tidak memperluas TestCase sehingga pelari tidak mencoba mengeksekusinya.
Saya tahu saya dapat mengecualikan kelas-kelas khusus ini di target junit dalam skrip semut. Tetapi saya tidak ingin mengubah file build pada setiap kelas utilitas baru yang saya tambahkan. Saya juga dapat mengganti nama kelas (tetapi memberikan nama yang baik ke kelas selalu merupakan bakat terlemah saya :-))
Apakah ada solusi elegan untuk masalah ini?
Jawaban:
Dengan asumsi Anda mengendalikan pola yang digunakan untuk menemukan kelas pengujian, saya sarankan untuk mengubahnya agar cocok
*Test
daripada*Test*
. CaraTestHelper
itu tidak akan cocok, tapiFooTest
akan.sumber
Beri anotasi kelas util Anda dengan @Ignore. Ini akan menyebabkan JUnit tidak mencoba dan menjalankannya sebagai pengujian.
sumber
Kasus khusus saya memiliki skenario berikut. Tes kami
semua meluas
dan JUnit mencoba menjalankan BaseTixContainerTest. BaseTixContainerTest yang malang hanya mencoba menyiapkan wadah, menyiapkan klien, memesan pizza, dan bersantai ... man.
Seperti disebutkan sebelumnya, Anda dapat membuat anotasi kelas dengan
Tapi itu menyebabkan JUnit melaporkan pengujian itu sebagai dilewati (bukan diabaikan sepenuhnya).
Semacam itu membuatku kesal.
Jadi saya membuat BaseTixContainerTest abstrak, dan sekarang JUnit benar-benar mengabaikannya.
sumber
@Ignore
Untuk mencegah JUnit membuat instance kelas basis pengujian Anda, buat saja
(@Ignore melaporkannya sebagai diabaikan yang saya simpan untuk pengujian yang diabaikan sementara .)
sumber
protected abstract class
.sumber
Hati-hati saat menggunakan pelengkapan kode IDE untuk menambahkan impor
@Test
.Ini harus
import org.junit.Test
dan tidakimport org.testng.annotations.Test
, misalnya. Jika Anda melakukan yang terakhir, Anda akan mendapatkan kesalahan "tidak ada metode yang dapat dijalankan".sumber
org.junit.jupiter.api.Test
! tetapi terima kasih kepada Anda, masalah ini telah diselesaikan sekarangAnt kini hadir dengan
skipNonTests
atribut yang dirancang untuk melakukan persis seperti yang Anda cari. Tidak perlu mengubah kelas dasar Anda menjadi abstrak atau menambahkan anotasi padanya.sumber
skipNonTests
atribut tersebut hanya tersedia di ant 1.9+, yang memalukan, karena terlihat sangat berguna. Ini juga akan mengecualikan superclass uji abstrak.Bagaimana dengan menambahkan metode pengujian kosong ke kelas-kelas ini?
sumber
Di kelas pengujian Anda jika menulis import org.junit.jupiter.api.Test; hapus dan tulis import org.junit.Test; Dalam hal ini, saya juga berhasil.
sumber
@BeforeAll
dan@AfterAll
tidak dijalankan.@BeforeClass
dan@AfterClass
, tetapi JUnit5 tidak. Referensi: junit.org/junit5/docs/current/user-guide/#migrating-from-junit4Saya juga menghadapi masalah serupa ("tidak ada metode yang dapat dijalankan ..") saat menjalankan bagian kode sederhana yang paling sederhana (Menggunakan @Test, @Before, dll.) Dan tidak menemukan solusinya di mana pun. Saya menggunakan Junit4 dan Eclipse SDK versi 4.1.2. Mengatasi masalah saya dengan menggunakan Eclipse SDK 4.2.2 terbaru. Saya harap ini membantu orang-orang yang berjuang dengan masalah yang agak serupa.
sumber