簡體   English   中英

在使用Django的'manage.py測試'時,對settings.py中'實時'數據庫的單元測試

[英]Do unit tests on the 'live' database in settings.py while using Django's 'manage.py test'

如果您在Django中建立了數據庫,那么如何讓TestRunner使用“實時”數據庫(根據settings.py中的DATABASE_ * settings.py )而不是在臨時測試數據庫上運行它們。

例如,我想在settings.py指定的live數據庫上運行以下測試:

import unittest

from example import models

class DBDriverTest(unittest.TestCase): 
    db testDriver(self):
       "Connect to the live database and drop in sample value."
       m = models.MyModel('hello')
       m.save() # ... save to the live database from settings.py

目前,以上代碼僅會保存到已構建的測試數據庫中。 這是非常有限的,因為我的應用程序具有在數據庫上運行的多個並行進程-而且我的單元測試將是不完整的(並且是不連貫的),而無法將內容泵送到“活動的”數據庫中並查看它們在短暫睡眠后的狀態。

我可以想到的兩個潛在選擇是:

  1. 插入Django API,以了解如何“手動”連接settings.py中的數據庫。

  2. 與“實時”數據庫建立低級連接並手動填充

先驗是有問題的,因為它將依賴Django的公共API下的內容。 后者是有問題的,因為它放棄了與數據庫無關的Django數據庫API,並且需要更多的人工操作。

感謝您的想法和投入。

布賴恩

您將必須定義自己的test_runner tearDown方法,因為每個測試都是獨立運行的,並且每次運行后都會清除數據庫。 您可以通過簡單地構建自己的test_runner來完成test_runner ,我們已經使用Web服務訪問的數據庫完成了一次(盡管不是我本人),而且有一段時間我們沒有任何數據庫從那里刪除任何東西的方法,但是要手動刪除整個數據庫;-)這很有趣。

回答您的問題:創建自己的test_runner並准備創建自己的tearDown方法,在其中您將僅刪除創建的對象。 您必須以某種方式在其中存儲primary keys ,這樣就不會從實時數據庫中刪除任何內容。

但是 ,我認為這不是一個好方法。 在實時數據庫上運行測試會給自己帶來災難。 遲早您會為此感到麻煩。 相反,您應該做的是轉儲活動數據庫,根據這些數據准備固定裝置 ,然后在測試中使用它們。 這是有據可查的,很容易做到。 這樣,您將擁有實時環境而不會冒着寶貴數據的風險,並且您無需編寫自己的test_runner 我認為這是最好和最安全的方法。

暫無
暫無

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

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