簡體   English   中英

我怎么告訴django-nose我的測試在哪里?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM