2012-02-24 52 views
3

使用sqlite for django時,您可以從源代碼管理中檢出應用程序,並運行單元測試,而無需執行任何特殊操作。但是當你切換到使用mysql作爲你的數據庫時,突然你需要創建一個數據庫。爲什麼我需要這樣做?這是特別奇怪的,因爲單元測試甚至不會使用該數據庫,它們將通過在'test_'前面添加名稱來創建它們自己的。爲什麼Django要求我創建一個mysql數據庫來運行測試?

回答

1

這是因爲Django加載settings.py文件來運行測試套件。您可以創建一個單獨的settings.py文件,並在運行測試時使用它。以django網站爲例:

--settings=test_sqlite 

假設您有一個名爲test_sqlite的settings.py文件。

去這裏的更多信息:

https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/unit-tests/

+1

我有一個單獨的設置文件,我仍然希望使用mysql而不是sqlite進行測試,因爲數據庫足夠不同,我想測試我正在部署的數據庫引擎。 – guidoism 2012-02-24 23:00:07

+0

您需要爲使用mysql和postgres創建一個數據庫。在sqllite中,當你去連接數據庫,連接('數據庫'),如果它不存在,它會被創建。在單元測試期間,他們將在數據庫中創建自己的表格,一旦完成單元測試就應該拆除表格。 – 2012-02-24 23:06:45

+0

是的,我明白了,但問題是:爲什麼? – guidoism 2012-02-24 23:11:14

1

如果您運行測試經常把下面的代碼在你的settings.py:

import sys 

if 'test' in sys.argv: 
    DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': 'test' 
    } 
} 
+0

仍然沒有解決這個問題,因爲它測試的不是我們部署的sqlite,所以不是一個很好的測試。但是如果它不存在,則可以使用settings.py或manage.py來創建數據庫。 – guidoism 2012-02-27 17:30:50

+0

沒關係。如果您使用的是純粹的django,則數據庫後端可以更改,並且您的網站應該可以正常工作。 – santiagobasulto 2012-03-03 13:13:36

+0

SQlite比單元測試MySQL的速度快一百倍。 – sbaechler 2012-03-05 12:49:54

1

我使用幾乎相同的解決方案用於測試,像@SimonBächler,而不是真實的數據庫

'NAME': 'test', 

我用

'NAME':' :memory:, 

所以它使用的內存來處理測試操作,而這就是爲什麼它並不總是創建/更新/刪除數據庫。

相關問題