Python 使用非托管外部只读数据库进行单元测试
我正在从事一个项目,该项目涉及一个巨大的外部数据集(~490Gb),加载在一个外部数据库中(MS SQL通过django pyodbc azure)。我已经在Django模型的meta中生成了标记为Python 使用非托管外部只读数据库进行单元测试,python,django,unit-testing,Python,Django,Unit Testing,我正在从事一个项目,该项目涉及一个巨大的外部数据集(~490Gb),加载在一个外部数据库中(MS SQL通过django pyodbc azure)。我已经在Django模型的meta中生成了标记为managed=False。在我的应用程序中,这很好,但我似乎不知道如何运行单元测试。我可以想到两种方法:模拟测试数据库中的数据,以及为单元测试(和CI)提供对生产数据集的只读访问。这两种选择都可以接受,但我无法找出其中任何一种: 选项1:模拟数据 因为我的模型被标记为managed=False,所以
managed=False
。在我的应用程序中,这很好,但我似乎不知道如何运行单元测试。我可以想到两种方法:模拟测试数据库中的数据,以及为单元测试(和CI)提供对生产数据集的只读访问。这两种选择都可以接受,但我无法找出其中任何一种:
选项1:模拟数据
因为我的模型被标记为managed=False
,所以没有迁移,因此测试运行程序无法创建数据库
选项2:实时数据
django-pyodbc-azure
将尝试创建一个测试数据库,该数据库失败,因为它具有只读连接。我还怀疑,即使允许它这样做,结果数据库也会丢失所需的表
Q如何运行单元测试?可以安装其他软件包或重新配置数据库。我的设置使用django 1.9和postgresql作为主数据库。在盯着我的屏幕看了一天之后,我找到了一个解决方案: 我从模型中删除了
managed=True
,并生成了迁移。为了防止针对生产数据库的实际迁移,我使用数据库路由器来防止迁移。(对于适当的应用程序和数据库,在allow_migrate
when中返回False)
在我的设置中,我检测单元测试是否正在运行,然后不定义数据库路由器或外部数据库。有了迁移,单元测试就开始了。我在网站上发布了对您答案的回复,您能澄清一下吗?