Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用非托管外部只读数据库进行单元测试_Python_Django_Unit Testing - Fatal编程技术网

Python 使用非托管外部只读数据库进行单元测试

Python 使用非托管外部只读数据库进行单元测试,python,django,unit-testing,Python,Django,Unit Testing,我正在从事一个项目,该项目涉及一个巨大的外部数据集(~490Gb),加载在一个外部数据库中(MS SQL通过django pyodbc azure)。我已经在Django模型的meta中生成了标记为managed=False。在我的应用程序中,这很好,但我似乎不知道如何运行单元测试。我可以想到两种方法:模拟测试数据库中的数据,以及为单元测试(和CI)提供对生产数据集的只读访问。这两种选择都可以接受,但我无法找出其中任何一种: 选项1:模拟数据 因为我的模型被标记为managed=False,所以

我正在从事一个项目,该项目涉及一个巨大的外部数据集(~490Gb),加载在一个外部数据库中(MS SQL通过django pyodbc azure)。我已经在Django模型的meta中生成了标记为
managed=False
。在我的应用程序中,这很好,但我似乎不知道如何运行单元测试。我可以想到两种方法:模拟测试数据库中的数据,以及为单元测试(和CI)提供对生产数据集的只读访问。这两种选择都可以接受,但我无法找出其中任何一种:

选项1:模拟数据 因为我的模型被标记为
managed=False
,所以没有迁移,因此测试运行程序无法创建数据库

选项2:实时数据
django-pyodbc-azure
将尝试创建一个测试数据库,该数据库失败,因为它具有只读连接。我还怀疑,即使允许它这样做,结果数据库也会丢失所需的表


Q如何运行单元测试?可以安装其他软件包或重新配置数据库。我的设置使用django 1.9和postgresql作为主数据库。

在盯着我的屏幕看了一天之后,我找到了一个解决方案:

我从模型中删除了
managed=True
,并生成了迁移。为了防止针对生产数据库的实际迁移,我使用数据库路由器来防止迁移。(对于适当的应用程序和数据库,在
allow_migrate
when中返回False)


在我的设置中,我检测单元测试是否正在运行,然后不定义数据库路由器或外部数据库。有了迁移,单元测试就开始了。

我在网站上发布了对您答案的回复,您能澄清一下吗?