我想加載一個json夾具到Python 2.6/Django 1.4單元測試中。我可以在測試級別上使用Django的TestCase,但需要8-10秒才能加載(2M的json,不會變得更小)。因此運行一打測試真的很慢,而且我想只加載一次測試數據庫。它看起來像可能是可能的Python 2.6中,與unittest2
,但我還沒有得到它的工作。Django Testcase,可以在類/模塊級加載燈具嗎?
# 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()沒有工作,要麼。設置功能肯定被調用,但似乎並不知道夾具。
因此,Django的TestCase將讀取燈具,而unittest2的TestCase將在類/模塊級別執行任務。有什麼方法可以結合這個操作,並在課堂/模塊級讀取燈具嗎?我嘗試了多重繼承,並且無法加載數據。
更新:基於@ robjohncox的建議,這個代碼,在模塊級:
from django.core import management
management.call_command('loaddata', 'test_data.json', verbosity=1, noinput=True)
似乎並創建一個數據庫。但是,然後Django似乎爲每個測試(這是空的)創建另一個數據庫。不知道如何告訴TestCase使用第一個數據庫(我試過Django和unittest2 TestCase)。
有關使用的更多信息?我嘗試設置'--database = test_foo',並且'test_foo連接不存在'(具有該名稱的數據庫確實存在)。在命令行上使用'loaddata'時,與在代碼中相比,結果相同。 –
我認爲問題在於,因爲您沒有使用django TestCase,所以在運行測試時不會顯式創建數據庫。我想你可以在運行'loaddata'前通過在你的'setUpClass'方法中調用'syncdb'命令(帶有參數'--noinput')來解決這個問題。這不是我自己嘗試過的技術,但它聽起來像是應該起作用。希望這可以幫助。 – robjohncox
實際上,我使用的是Django TestCase(並沒有改變代碼),我試着在模塊的頂部和TestCase中加載。將嘗試syncdb - 結果,沒有喜悅...嗯,現在我想知道它是否正在尋找settings.py中的數據庫名稱。更多測試... –