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

时间:2016-05-09 11:50:17

标签: python django unit-testing

我正在处理一个项目,该项目涉及在外部数据库(通过django-pyodbc-azure的MS SQL)中加载的巨大外部数据集(~490Gb)。我已经在他们的meta中生成了标记为managed=False的Django模型。在我的应用程序中,这工作正常,但我似乎无法弄清楚如何运行我的单元测试。我可以想到两种方法:模拟测试数据库中的数据,并为生产数据集提供单元测试(和CI)的只读访问。这两个选项都是可以接受的,但我无法弄清楚其中任何一个:

选项1:模拟数据 由于我的模型标记为managed=False,因此没有迁移,因此测试运行器无法创建数据库。

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

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

1 个答案:

答案 0 :(得分:2)

经过一天的盯着我的屏幕后,我找到了一个解决方案:

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

在我的设置中,我检测是否正在运行单元测试,然后只是不定义数据库路由器或外部数据库。随着迁移的出现,单元测试。