2013-10-31 112 views
2

Django 1.5關於測試的文檔說:Django測試。運行測試時從生產數據庫中查找數據?

在運行測試時從生產數據庫中查找數據?

如果您的代碼在其模塊編譯爲時試圖訪問數據庫,則會在設置測試數據庫之前發生,並且可能會有意外的結果。例如,如果模塊級代碼中存在數據庫查詢且存在真實數據庫,則生產數據可能會污染您的測試。無論如何,在代碼中有這樣的導入時間數據庫查詢是一個糟糕的主意 - 重寫您的代碼,以便它不這樣做。

有人可以解釋我無法理解的粗體文本。謝謝。

回答

1

你正在讀這篇文章:http://djbook.ru/rel1.5/topics/testing/overview.html

這看起來像的,可能含有尷尬通道的在線協作的書籍之一。

首先,你的設置文件建立一個數據庫:

DATABASES = { 
'default': { 
    'ENGINE': 'django.db.backends.postgresql_psycopg2', 
    'NAME': 'myDB' ... 

當你運行測試,測試運行器讀取該名稱,預先考慮「TEST_」獲得「test_myDB」,併爲測試一個空數據庫和玩。

但是測試運行器只有在模塊被加載(不是「編譯」)之後才能做到這一點。所以......

from django.test import TestCase 

# Don't use the database here; it's still myDB 

class SimpleTest(TestCase): 

    def setUp(self): 
      # We are all about the test_myDB database, here 
     self.user = User.objects.create_user(
      username='zaphod', 
      email='[email protected]', 
      password='beeblebrox', 
     ) 

另一個細節:除非你是瘋了,並deving,並直接在生產服務器上進行測試,MYDB是不是「生產數據庫」。一個更好的名字是「開發數據庫」。

+0

你是對的;也可以通過「生產」來實現,它們也可能意味着「暫存」。 – Ric

+0

除非你瘋了,並且正在你的登臺服務器上直接進行測試和測試,myDB也不是「臨時數據庫」...... C-; – Phlip

+1

我的意思是您可以在您的開發服務器上進行開發和測試,然後您可以將其部署到登臺服務器上並再次運行測試,以確保在將該環境部署到生產服務器之前,該環境中的所有環境仍能正常工作。 – Ric

相關問題