簡體   English   中英

Django Testcase,可以在類/模塊級別加載夾具嗎?

[英]Django Testcase, possible to load fixture at the class/module level?

我正在嘗試將 json 夾具加載到 Python 2.6/Django 1.4 單元測試中。 我可以在測試級別使用 Django 的 TestCase 完成它,但是加載需要 8-10 秒(2M 的 json,不會變得更小)。 因此,運行十幾個測試真的很慢,我只想加載一次測試數據庫。 它看起來像它可能在Python 2.6是可能的,通過添加unittest2 ,但我還沒有得到它工作。

# Works, but takes eight seconds per test.
class BaseStuff(django.test.testcases.TestCase):
    fixtures = ['test_data']

    def setUp(self):
        # stuff
    def test_one(self):
        # stuff

# Doesn't work - but runs *really* fast.
class BaseStuff(unittest2.TestCase):
    @classmethod
    def setUpClass(cls):  # Added in unittest2
        fixtures = ['test_data']
        print "in setupClass()"  # Does print, so function is called.

嘗試setupModule()也不起作用。 肯定會調用 setup 函數,但似乎不知道夾具。

所以Django 的TestCase 會讀取fixture,而unittest2 的TestCase 會在類/模塊級別做事。 有沒有辦法結合這個操作,並在類/模塊級別讀取設備? 我嘗試了多重繼承,但無法加載數據。

更新:基於@robjohncox 的建議,此代碼在模塊級別:

from django.core import management
management.call_command('loaddata', 'test_data.json', verbosity=1, noinput=True)

似乎確實創建了一個數據庫。 但是隨后 Django 似乎為每個測試創建了另一個數據庫(這是空的)。 不知道如何告訴 TestCase 使用第一個 db(我嘗試了 Django 和 unittest2 TestCase)。

您可以通過在setUpClass方法中自己手動加載夾具數據來解決這個問題 - 有一個 django 管理命令 ( loaddata ) 可以為您執行此操作,可以從代碼中調用它 正如您在示例中正確指出的那樣,這需要是unittest2.TestCase

正如Django doc所建議的,您可以在夾具名稱中使用數據庫的名稱,將數據加載到數據庫中:

所以結合你的建議和我的:

在您的 settings.py 中,您有以下數據庫:

DATABASES = {'default': ..., 'legacy_db': ...}

然后你可以像這樣將夾具加載到數據庫中:

from django.core import management
management.call_command('loaddata', 'test_data.legacy_db.json', verbosity=1, noinput=True)

參考: https : //docs.djangoproject.com/en/dev/ref/django-admin/#database-specific-fixtures

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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