如何在数据库数据库上运行django单元测试?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (100)

我开始了TDD的开发态度,并且正在为Django应用程序编写单元测试。我知道要用这种方法来执行测试,但是对于给定的测试,我确实需要在整个数据库上执行它,而用于1,000万行数据库的JSON夹具并不是我想要处理的,而且,这个测试是“只读的”。

因此,问题是如何设置测试套件以在生产数据库上运行?我想它可以像添加数据库一样简单_某些测试的设置方法中的名称设置。但是环境。达塔巴什_名称=“prod”_在运行测试时,DB“会导致”NameError:全局名称‘设置’未定义“。

那么,如何在生产数据库而不是临时数据库上运行测试套件的单个测试,或者更好的是,什么是最佳实践?

提问于
用户回答回答于

首先,如果在生产数据库上运行它,那么它并不是一个“单元”测试。

这是一个一流的批次作业,需要被视为一流的生产批量作业。

你不能用Djangotest命令,用于查看生产数据。它总是创建一个空数据库,该数据库由TestCase中的固定设备填充。

可以使生产数据库处理正确。这样就可以正确配置环境,这样命令就可以简单地使用Django ORM来处理数据。

或者使用DJANGO_SETTINGS_MODULE环境变量或使用settings.configure()函数创建环境。

然后,可以导入模型,并对生产数据库执行您想要做的处理。

如果愿意,可以将其称为“测试”,但您正在查看生产数据,因此在获取设置文件和使用适当的ORM配置方面,必须将其视为生产应用程序。

用户回答回答于

如果有人在这里搜索给定问题的解决方案,下面是如何在Django生产数据库上执行单元测试的框架。检查Django docs部分这里,用于文件/目录结构,以及关于将给定代码放在何处的说明。它应该进去yourapp/management/commands/newcommandname.py,并且管理文件夹和命令文件夹都应该包含空的。__init__.py使python将它们视为有效模块的文件。

测试套件可以按以下方式运行:

$python management e.py新命令名

下面是你应该输入的代码yourapp/management/commands/newcommandname.py:

from django.core.management.base import NoArgsCommand
import unittest

class Command(NoArgsCommand):
    help = """
    If you need Arguments, please check other modules in 
    django/core/management/commands.
    """

    def handle_noargs(self, **options):
        suite = unittest.TestLoader().loadTestsFromTestCase(TestChronology)
        unittest.TextTestRunner().run(suite)


class TestChronology(unittest.TestCase):
    def setUp(self):
        print "Write your pre-test prerequisites here"

    def test_equality(self):
        """
        Tests that 1 + 1 always equals 2.
        """
        from core.models import Yourmodel
        self.failUnlessEqual(1 + 1, 2)

扫码关注云+社区