[英]How do I tell django-nose where my tests are?
我在測試目錄中測試了Django應用程序:
my_project/apps/my_app/
├── __init__.py
├── tests
│ ├── __init__.py
│ ├── field_tests.py
│ └── storage_tests.py
├── urls.py
├── utils.py
└── views.py
Django測試運行器要求我在我的應用程序的tests目錄的__init__.py
文件中放入一個suite()函數。 該函數返回當我執行$ python manage.py test時將運行的測試用例
我安裝了django-nose。 當我嘗試使用django-nose運行測試時,運行0測試:
$ python manage.py test <app_name>
如果我直接指向測試模塊,則運行測試:
$ python manage.py test my_project.apps.my_app.tests.storage_tests
為什么django-nose的測試跑者沒有找到我的測試? 我必須做什么?
如果你使用django-nose,你可以使用一個簡單的選擇器:
from nose.selector import Selector
from nose.plugins import Plugin
import os
import django.test
class TestDiscoverySelector(Selector):
def wantDirectory(self, dirname):
parts = dirname.split(os.path.sep)
return 'my_app' in parts
def wantClass(self, cls):
return issubclass(cls, django.test.TestCase)
def wantFile(self, filename):
parts = filename.split(os.path.sep)
return 'test' in parts and filename.endswith('.py')
def wantModule(self, module):
parts = module.__name__.split('.')
return 'test' in parts
class TestDiscoveryPlugin(Plugin):
enabled = True
def configure(self, options, conf):
pass
def prepareTestLoader(self, loader):
loader.selector = TestDiscoverySelector(loader.config)
這只是一個示例實現,您可以使其更具可配置性或根據您的需要進行調整。 要在Django項目中使用它,只需在settigs.py中提供以下選項
NOSE_PLUGINS = ['lorepo.utility.noseplugins.TestDiscoveryPlugin']
錯誤:
python manage.py test my_app.tests.storage_tests:TestCase.test_name
實際上是帶有斜杠,直到類名和文件的擴展名
對:
python manage.py test my_app/tests/storage_tests.py:TestCase.test_name
如果你在模塊的開頭添加test = True並且你的方法以test_開頭,那么nose會自動選擇
看看鼻子如何檢測測試http://nose.readthedocs.io/en/latest/finding_tests.html
我也遇到了同樣的情況。 使用該套件,它將允許您運行所有測試或測試應用程序,但不能運行特定的測試用例或特定測試。
它非常hacky,但是我為解決這個問題所做的不是在__init__.py
中定義一個套件,而是從所有其他測試模塊中import *
,它很糟糕但是它有效。
我做了一些事情來幫助確保我不會在其他模塊中破壞測試套件...在每個測試模塊中聲明了__all__
,因此只有測試名稱導入了*並且保持pylint運行我我收到了類名重新定義的通知。
說過你應該能夠讓這個工作沒有任何丑陋的import *
廢話...我不使用鼻子和django-nose ...(我打算很快糾正)...因為這就是你看起來你可以這樣做來運行你的apps目錄中的所有測試:
python manage.py test apps
或運行單個測試模塊的所有測試:
python manage.py test apps.my_app.tests.storage_tests
注意我沒有在前面的例子中包含該項目...這似乎對我使用nosetests和django-nose工作正常。
此外,要運行特定的測試套件,您可以執行以下操作:
python manage.py test apps.my_app.tests.storage_tests:TestCase
或者運行一個特定的測試:
python manage.py test apps.my_app.tests.storage_tests:TestCase.test_name
要弄清楚應用程序的位置,請將這些內容添加到manage.py的頂部
import os, site
ROOT = os.path.dirname(os.path.abspath(__file__))
path = lambda *a: os.path.join(ROOT, *a)
site.addsitedir(path('apps'))
從那時起你就可以使用了
python manage.py test my_app.tests.storage_tests:TestCase.test_name
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.