Câu trả lời như đã nêu của Tomasz là chính xác. Tuy nhiên, nó có thể trở nên tẻ nhạt để đảm bảo rằng việc nhập __init__.py
phù hợp với cấu trúc tệp của bạn.
Để tự động phát hiện tất cả các bài kiểm tra trong thư mục, bạn có thể thêm phần này vào __init__.py
:
import unittest
def suite():
return unittest.TestLoader().discover("appname.tests", pattern="*.py")
Điều này sẽ cho phép bạn chạy ./manage.py test appname
nhưng sẽ không xử lý các bài kiểm tra cụ thể. Để làm điều đó, bạn có thể sử dụng mã này (cũng trong __init__.py
):
import pkgutil
import unittest
for loader, module_name, is_pkg in pkgutil.walk_packages(__path__):
module = loader.find_module(module_name).load_module(module_name)
for name in dir(module):
obj = getattr(module, name)
if isinstance(obj, type) and issubclass(obj, unittest.case.TestCase):
exec ('%s = obj' % obj.__name__)
Bây giờ bạn có thể chạy tất cả các bài kiểm tra của mình thông qua manage.py test app
hoặc kiểm tra cụ thể thông quamanage.py test app.TestApples