Perilaku telah berubah dalam Django 1.6, jadi tidak perlu lagi membuat paket. Beri nama file Anda test*.py
.
Dari dokumentasi Django 1.7
Saat Anda menjalankan pengujian, perilaku default utilitas pengujian adalah menemukan semua kasus pengujian (yaitu, subkelas unittest.TestCase) dalam file apa pun yang namanya dimulai dengan pengujian, secara otomatis membuat rangkaian pengujian dari kasus pengujian tersebut, dan jalankan suite itu.
Dari dokumentasi Django 1.6 ,
Penemuan pengujian didasarkan pada penemuan pengujian built-in modul yang paling unik. Secara default, ini akan menemukan tes dalam file apa pun bernama "test * .py" di bawah direktori kerja saat ini.
Perilaku sebelumnya, dari dokumentasi Django 1.5 :
Saat Anda menjalankan pengujian, perilaku default dari utilitas pengujian adalah menemukan semua kasus pengujian (yaitu, subkelas unittest.TestCase) di models.py dan tests.py, secara otomatis membuat rangkaian pengujian dari kasus pengujian tersebut, dan jalankan suite itu.
Ada cara kedua untuk mendefinisikan rangkaian pengujian untuk sebuah modul: jika Anda mendefinisikan sebuah fungsi yang disebut suite () baik dalam models.py atau test.py, runner percobaan Django akan menggunakan fungsi itu untuk membangun rangkaian percobaan untuk modul itu. Ini mengikuti organisasi yang disarankan untuk pengujian unit. Lihat dokumentasi Python untuk detail lebih lanjut tentang cara membuat rangkaian pengujian yang kompleks.
test*.py
berkas saya dalam sebuah folder yang dipanggiltests
untuk menjaga folder tetap bersih - ini dimungkinkan, tetapi Anda harus menjalankan./manage.py test app.tests
dan semua impor relatif perlu naik satu tingkat (from .models
menjadifrom ..models
).Perhatikan bahwa pendekatan ini tidak lagi berlaku dari Django 1.6, lihat posting ini .
Anda bisa membuat
tests
folder dengan___init___.py
inside (sehingga menjadi satu paket). Kemudian Anda menambahkan file split test .py Anda di sana dan mengimpor semuanya___init___.py
.Ie: Gantikan
test.py
file dengan modul yang terlihat dan berfungsi seperti file:Buat
tests
Direktori di bawah aplikasi yang dimaksudImpor submodul ke
app\tests\__init__.py
:Sekarang Anda dapat menggunakan ./manage.py seolah-olah semuanya ada dalam satu file:
sumber
python manage.py test myapp
maka sebenarnya jawaban ini bekerja dengan baik. (baru saja mencobanya)Jawaban Tomasz benar. Namun, mungkin membosankan untuk memastikan bahwa impor
__init__.py
sesuai dengan struktur file Anda.Untuk secara otomatis mendeteksi semua tes di folder Anda dapat menambahkan ini di
__init__.py
:Ini akan memungkinkan Anda untuk menjalankan
./manage.py test appname
tetapi tidak akan menangani pengujian tertentu yang sedang berjalan. Untuk melakukannya, Anda dapat menggunakan kode ini (juga di__init__.py
):Sekarang Anda dapat menjalankan semua pengujian melalui
manage.py test app
atau pengujian tertentu melaluimanage.py test app.TestApples
sumber
__init__.py
sys.modules[packagename]
. Solusi cepat adalah untukdel
semua yang menyebabkan masalah setelah di atas. (Atau Anda dapat mengganti nama folder Anda;))python manage.py test appName
) bit kedua dari kode akan memunculkan kesalahan yang menyatakan bahwa__path__
itu tidak tersedia. Saya menghindarinya dengan membungkus potongan kedua dalam sebuahif '__path__' in locals():
cek, yang berhasil. Terima kasih atas jawabannya!Buat saja struktur direktori Anda seperti ini:
Dan
python manage.py test myapp
akan bekerja seperti yang diharapkan.sumber
http://docs.python.org/library/unittest.html#organizing-tests berbicara tentang membagi berkas menjadi modul, dan bagian tepat di atasnya memiliki contohnya.
sumber
Tidak perlu membuat kode apa pun di init. Cukup buat subdirektori di aplikasi Anda. Hanya persyaratan untuk tidak menyebutnya tes * Sebagai contoh
sumber
Dengan Django 2.2 solusi sederhana dan cukup baik dapat membuat
test
map di dalam aplikasi, dan Anda bisa meletakkantest_...py
berkas terkait ke dalamnya , tambahkan saja__init__.py
ketest
map.sumber
Jika Anda memiliki penyiapan yang lebih rumit, atau tidak ingin menggunakan
from ... import *
pernyataan -type, Anda dapat menentukan fungsi yang dipanggilsuite
di tests.py (atau tests / __ init__.py), yang mengembalikan turunan dariunittest.TestSuite
.sumber
Saya pikir
./manage.py test
hanya menjalankan semua trik tes (dalam django> = 1.7).Jika tes pengorganisasian Anda tentang pengelompokan dan cherrypicking dan Anda adalah penggemar
nose
penggunaan hidung django :Jika Anda tahu nose, maka Anda tahu bagaimana "wildcard" jauh lebih baik di semua file Anda.
PS
Ini hanya praktik yang lebih baik. Semoga membantu. Jawabannya dipinjam dari sini: Menjalankan kasus percobaan khusus di Django ketika aplikasi Anda mempunyai direktori percobaan
sumber
Saya memiliki dua file. Yang satu
tests.py
dan yang lainnyatest_api.py
. Saya dapat menjalankannya secara individual seperti di bawah ini.Lihat respons @ osa tentang konvensi penamaan file.
sumber