Dalam proyek kami, saya memiliki beberapa tes JUnit yang misalnya mengambil setiap file dari direktori dan menjalankan tes padanya. Jika saya menerapkan testEveryFileInDirectory
metode TestCase
ini muncul sebagai hanya satu tes yang mungkin gagal atau berhasil. Tapi saya tertarik dengan hasil pada setiap file. Bagaimana saya bisa menulis TestCase
/ TestSuite
sedemikian sehingga setiap file muncul sebagai tes terpisah misalnya dalam TestRunner grafis dari Eclipse? (Mengkodekan metode pengujian eksplisit untuk setiap file bukanlah suatu pilihan.)
Bandingkan juga pertanyaan ParameterizedTest dengan nama di Eclipse Testrunner .
java
unit-testing
junit
parameterized-unit-test
Hans-Peter Störr
sumber
sumber
Jawaban:
Lihatlah Tes Parameterized di JUnit 4.
Sebenarnya saya melakukan ini beberapa hari yang lalu. Saya akan mencoba menjelaskan ...
Pertama-tama, buat kelas pengujian Anda secara normal, seperti Anda yang hanya menguji dengan satu file masukan. Hiasi kelas Anda dengan:
Buat satu konstruktor yang mengambil input yang akan berubah di setiap panggilan uji (dalam hal ini mungkin file itu sendiri)
Kemudian, buat metode statis yang akan mengembalikan
Collection
array. Setiap larik dalam koleksi akan berisi argumen input untuk konstruktor kelas Anda, misalnya file. Hiasi metode ini dengan:Ini contoh kelasnya.
Periksa juga contoh ini
sumber
JUnit 3
JUnit 4
sumber
Junit 5 Tes Parameter
Tes berparameter JUnit 5 mendukung ini dengan mengizinkan penggunaan metode sebagai sumber data :
JUnit 5 DynamicTests
JUnit 5 juga mendukung hal ini melalui gagasan a
DynamicTest
, yang akan dihasilkan dalam a@TestFactory
, dengan menggunakan metode statisdynamicTest
.Tes yang dijalankan di IDE Anda (IntelliJ di sini) akan ditampilkan seperti ini:
sumber
Harus dimungkinkan di JUnit 3 dengan mewarisi dari
TestSuite
dan menimpatests()
metode ke daftar file dan untuk setiap mengembalikan sebuah instance dari subkelasTestCase
yang mengambil nama file sebagai parameter konstruktor dan memiliki metode pengujian yang menguji file yang diberikan dalam konstruktor.Di JUnit 4 mungkin akan lebih mudah.
sumber
Anda dapat mempertimbangkan untuk menggunakan perpustakaan JUnitParams , jadi Anda akan memiliki beberapa opsi (lebih bersih):
Anda dapat melihat lebih banyak contoh penggunaan di sini .
Selain itu tentang JUnitParams, mengapa menulis pengujian berparameter dengannya lebih mudah dan lebih terbaca :
sumber
Jika TestNG adalah sebuah opsi, Anda dapat menggunakan Parameter dengan DataProviders .
Setiap pengujian file akan menampilkan hasilnya dalam laporan berbasis teks atau UI plugin TestNG Eclipse. Jumlah total pengujian yang dijalankan akan menghitung setiap file Anda satu per satu.
Perilaku ini berbeda dengan Teori JUnit , di mana semua hasil disatukan dalam satu entri "teori" dan hanya dihitung sebagai 1 tes. Jika Anda ingin pelaporan hasil terpisah di JUnit, Anda dapat mencoba Pengujian Parameter .
Tes dan masukan
Contoh keluaran
sumber
Saya memiliki masalah serupa dan akhirnya menulis pelari JUnit 4 sederhana yang memungkinkan med untuk menghasilkan tes secara dinamis.
https://github.com/kimble/junit-test-factory
sumber