python - 使用测试数据库测试 Django 数据库操作脚本

标签 python django unit-testing

我正在尝试设置 django 测试环境来测试我们用来将数据加载到数据可视化 Web 应用程序中的脚本。它对于实际的 django 应用程序来说是“外部的”,因此使用 manage.py 测试工具似乎不合适或不干净。

我已关注the instructions found in the django docs编写我自己的测试模块,但是当我到达实际尝试访问数据库的语句时,我收到一条错误,指出表不存在。

我还需要做些什么来确保使用所有需要的表创建测试数据库吗?

作为引用,这里是我的测试用例的代码:

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

最佳答案

严格来说,测试数据库的目的是创建、用于运行单元测试,然后销毁。它们并不是真正“测试”数据加载脚本的地方。为什么不直接使用标准开发数据库呢?那里不应该有任何东西是你无法取回、无法备份等的,而且它几乎是为这种破坏性行为而设计的。

关于python - 使用测试数据库测试 Django 数据库操作脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5970377/

相关文章:

python - Django 1.8 以及如何更改应用程序的迁移顺序

c# - 在 VS2005 单元测试中是否可以断言已调用方法?

python - 带双端队列的冒号运算符(Python 中)

python - Keras 与 Caffe 中的卷积有什么区别?

python - sns stripplot 仅包含前 n 个类别

python - Django - 将模型字段复制到另一个字段

javascript - 不要从 django 表单打印媒体

javascript - 为什么 jasmine 无法比较 knockout.js 可观察对象,但可以使用正常函数?

c# - 测试订阅 EventAggregator

python - Gunicorn 显示 404 而不是应用程序