簡體   English   中英

使用測試數據庫測試Django數據庫操作腳本

[英]Testing Django database manipulation scripts with test database

我正在嘗試設置Django測試環境,以測試用於將數據加載到數據可視化Web應用程序中的腳本。 它在實際的django應用程序中是“外部的”,因此使用manage.py測試工具似乎不合適或不干凈。

我已經按照django文檔中的說明編寫了自己的測試模塊,但是當我到達一條實際上試圖訪問數據庫的語句時,我收到一條錯誤消息,指出該表不存在。

我還需要做其他事情來確保使用所有需要的表創建測試數據庫嗎?

供參考,這是我的測試用例中的代碼:

import os
import sys

sys.path.append(os.curdir)
os.environ['DJANGO_SETTINGS_MODULE'] = 'visualization_app.settings'
from django.utils import unittest
from django.test.utils import setup_test_environment
from topic_modeling import settings

# The module to be tested
import analysis_import

setup_test_environment()

class CreateAnalysisTestCase(unittest.TestCase):

    def test_analysis_creation(self):
        self.assertTrue(analysis_import.create_analysis('a_name', 'a description'))

if __name__ == '__main__':
    unittest.main()

我得到的錯誤如下所示:

ERROR: test_analysis_creation (__main__.CreateAnalysisTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "import_scripts/tests.py", line 20, in test_analysis_creation
    self.assertTrue(analysis_import.create_analysis('a_name', 'a description'))
  File "/home/dan/programmingProjects/topical_guide/import_scripts/analysis_import.py", line 117, in create_analysis
    Analysis.objects.get(name=name, dataset=dataset)
  File "/usr/local/lib/python2.7/dist-packages/Django-1.3-py2.7.egg/django/db/models/manager.py", line 132, in get
    return self.get_query_set().get(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/Django-1.3-py2.7.egg/django/db/models/query.py", line 344, in get
    num = len(clone)
  File "/usr/local/lib/python2.7/dist-packages/Django-1.3-py2.7.egg/django/db/models/query.py", line 82, in __len__
    self._result_cache = list(self.iterator())
  File "/usr/local/lib/python2.7/dist-packages/Django-1.3-py2.7.egg/django/db/models/query.py", line 273, in iterator
    for row in compiler.results_iter():
  File "/usr/local/lib/python2.7/dist-packages/Django-1.3-py2.7.egg/django/db/models/sql/compiler.py", line 680, in results_iter
    for rows in self.execute_sql(MULTI):
  File "/usr/local/lib/python2.7/dist-packages/Django-1.3-py2.7.egg/django/db/models/sql/compiler.py", line 735, in execute_sql
    cursor.execute(sql, params)
  File "/usr/local/lib/python2.7/dist-packages/Django-1.3-py2.7.egg/django/db/backends/util.py", line 34, in execute
    return self.cursor.execute(sql, params)
  File "/usr/local/lib/python2.7/dist-packages/Django-1.3-py2.7.egg/django/db/backends/sqlite3/base.py", line 234, in execute
    return Database.Cursor.execute(self, query, params)
DatabaseError: no such table: visualize_analysis

嚴格來說,測試數據庫旨在創建,用於運行單元測試然后銷毀。 它們並不是真正“測試”數據加載腳本的地方。 為什么不只使用您的標准開發數據庫? 那里不應該有任何您無法找回,需要備份的東西,等等,並且它是針對這種破壞性行為而專門設計的。

據我所知,您正在測試的模塊仍然使用django的ORM系統來讀取數據庫,因此使用manage.py來運行測試存在任何問題。 您可以使用

./manage.py測試分析_導入

只運行位於analysis_import模塊中的測試代碼。 這樣,您仍然只能運行此模塊的測試,而避免編寫自己的測試模塊的麻煩。

然后讓我們知道您是否仍然遇到相同的問題。

暫無
暫無

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

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