Di tim kami, kami mendefinisikan sebagian besar kasus uji seperti ini:
Satu kelas "kerangka kerja" ourtcfw.py
:
import unittest
class OurTcFw(unittest.TestCase):
def setUp:
# something
# other stuff that we want to use everywhere
dan banyak kasus uji seperti testMyCase.py:
import localweather
class MyCase(OurTcFw):
def testItIsSunny(self):
self.assertTrue(localweather.sunny)
def testItIsHot(self):
self.assertTrue(localweather.temperature > 20)
if __name__ == "__main__":
unittest.main()
Ketika saya sedang menulis kode tes baru dan ingin sering menjalankannya, dan menghemat waktu, apa yang saya lakukan adalah saya meletakkan "__" di depan semua tes lainnya. Tapi itu merepotkan, mengalihkan saya dari kode yang saya tulis dan suara komit yang dibuatnya ini benar-benar menjengkelkan.
Jadi misalnya ketika membuat perubahan testItIsHot()
, saya ingin dapat melakukan ini:
$ python testMyCase.py testItIsHot
dan telah unittest
berjalan saja testItIsHot()
Bagaimana saya bisa mencapainya?
Saya mencoba menulis ulang if __name__ == "__main__":
bagian itu, tetapi karena saya baru di Python, saya merasa tersesat dan terus menabrak segala sesuatu selain metode.
sumber
__init__.py
di dalam direcrory (dan subdirs, jika ada) dan memanggil mis.python test/testMyCase.py test.MyCase.testItIsHot
.Jika Anda mengatur kasus pengujian Anda, yaitu, ikuti organisasi yang sama seperti kode aktual dan juga gunakan impor relatif untuk modul dalam paket yang sama
Anda juga dapat menggunakan format perintah berikut:
Dokumentasi Python3 untuk ini: https://docs.python.org/3/library/unittest.html#command-line-interface
sumber
Dapat bekerja dengan baik seperti yang Anda duga
Dan ada cara lain untuk hanya menguji
testItIsHot
:sumber
Jika Anda memeriksa bantuan modul unittest, ia memberi tahu Anda tentang beberapa kombinasi yang memungkinkan Anda untuk menjalankan kelas kasus uji dari modul dan metode uji dari kelas kasus uji.
Itu tidak mengharuskan Anda untuk mendefinisikan
unittest.main()
sebagai perilaku default modul Anda.sumber
usage
bahkan anehnya tidak konsisten): berjalanpython -m unittest module_test.TestClass.test_method
mengasumsikan filemodule_test.py
(dijalankan dari direktori saat ini, dan__init.py__
ini tidak diperlukan); danmodule_test.py
berisiclass TestClass(unittest.TestCase)...
yang berisidef test_method(self,...)
(ini juga berfungsi untuk saya di python 2.7.13)Mungkin, itu akan bermanfaat bagi seseorang. Jika Anda ingin menjalankan hanya tes dari kelas tertentu:
Ini berfungsi untuk saya dengan python 3.6
sumber
Terinspirasi oleh @yarkee saya menggabungkannya dengan beberapa kode yang sudah saya dapatkan. Anda juga dapat memanggil ini dari skrip lain, hanya dengan memanggil fungsi
run_unit_tests()
tanpa harus menggunakan baris perintah, atau cukup memanggilnya dari baris perintah denganpython3 my_test_file.py
.Sayangnya ini hanya berfungsi untuk
Python 3.3
atau lebih unggul:Kode pelari:
Mengedit sedikit kode, Anda dapat melewati array dengan semua tes unit yang ingin Anda panggil:
Dan file lain:
Atau, Anda dapat menggunakan https://docs.python.org/3/library/unittest.html#load-tests-protocol dan tentukan metode berikut pada modul / file pengujian Anda:
Jika Anda ingin membatasi eksekusi ke satu file uji tunggal, Anda hanya perlu mengatur pola penemuan tes untuk satu-satunya file tempat Anda mendefinisikan
load_tests()
fungsi.Referensi:
Atau contoh program utama terakhir, saya datang dengan variasi berikut setelah membaca
unittest.main()
implementasi metode:sumber
TL; DR : Ini kemungkinan besar akan berhasil:
Penjelasannya :
Cara yang nyaman
akan bekerja tetapi asumsi tak terucapkan adalah Anda sudah memiliki potongan kode konvensional ini di dalam (biasanya di akhir) file tes Anda.
Cara yang tidak nyaman
akan selalu berfungsi, tanpa mengharuskan Anda memiliki
if __name__ == "__main__": unittest.main()
cuplikan kode di file sumber pengujian Anda.Jadi mengapa metode ke-2 dianggap tidak nyaman? Karena akan terasa sakit di (_ masukkan salah satu bagian tubuh Anda di sini _) untuk mengetikkan panjang itu, jalur yang dibatasi titik dengan tangan. Sedangkan dalam metode 1,
mypkg/tests/test_module.py
bagian dapat diselesaikan secara otomatis, baik oleh shell modern, atau oleh editor Anda.NB: Jika Anda mengira bagian tubuh itu di bawah pinggang Anda, Anda orang yang asli. :-) Maksud saya mengatakan "finger joint". Terlalu banyak mengetik akan berdampak buruk bagi persendian Anda. ;-)
sumber