Saya memiliki metode python 2.7 yang terkadang memanggil
sys.exit(1)
Apakah mungkin membuat pengujian unit yang memverifikasi baris kode ini dipanggil ketika kondisi yang tepat terpenuhi?
python
unit-testing
Travis Bear
sumber
sumber
Jawaban:
Iya.
sys.exit
kenaikan gajiSystemExit
, sehingga Anda dapat memeriksanya denganassertRaises
:Contoh dari
SystemExit
memiliki atributcode
yang diatur ke status keluar yang diusulkan, dan manajer konteks yang dikembalikan olehassertRaises
memiliki contoh pengecualian yang tertangkapexception
, jadi memeriksa status keluar itu mudah:Dokumentasi sys.exit :
sumber
sys.exit(1)
(bukan, katakanlah,sys.exit(0)
) Anda perlu menegaskan bahwacode
ini adalah 1. Saya kira Anda bisa melakukannya denganassertRaisesRegexp(SystemExit, '1')
?unittest
metode yang memungkinkan Anda melewatkan pengecualian dan predikat yang dapat dipanggil untuk dijalankan pada pengecualian atau argumennya, bukan hanya pola regex untuk dijalankan pada representasi string dari argumen pertama ... tapi saya rasa tidak. Apakah ada modul tes lain yang saya pikirkan?self.assertRaisesRegex( SystemExit, '^2$', testMethod )
sedikit kode, cukup mudah dibaca.self.assertRaisesRegexp
Berikut contoh kerja lengkapnya. Terlepas dari jawaban Pavel yang sangat baik, saya butuh waktu untuk memikirkannya, jadi saya memasukkannya di sini dengan harapan itu akan membantu.
sumber
Saya menemukan jawaban atas pertanyaan Anda dalam pencarian dokumentasi Pengujian Unit Python untuk "Pengujian untuk Pengecualian". Menggunakan contoh Anda, pengujian unit akan terlihat seperti berikut:
Ingatlah untuk menyertakan semua argumen yang diperlukan untuk menguji fungsi Anda.
sumber
Sebagai catatan tambahan untuk jawaban luar biasa Pavel, Anda juga dapat memeriksa status tertentu jika disediakan dalam fungsi yang Anda uji. Misalnya jika
your_method()
berisi berikutsys.exit("Error")
ini akan mungkin untuk menguji "Error" secara khusus:sumber