Django unittest使用“真实”数据库

问题描述

我目前正在为视图编写测试用例,这些视图最终也使用数据库认情况下,将在运行测试后创建和删除测试数据库

由于数据库本身是开发数据库,​​因此我不希望我的测试创建单独的数据库,而仅使用令人兴奋的内容。 另外,我想提醒您的是,在我的环境中,已创建并提供了数据库,而django无法运行迁移或创建数据库

如何创建使用真实数据库的单元测试?

解决方法

我认为这个问题的主要原因是因为您的Django数据库用户未获得创建/删除数据库的权限。

Django需要创建和删除测试数据库以进行单元测试。它不能为此目的使用现有数据库。为什么不允许在单元测试中使用现有数据库是因为,具有相同数据库许可权的任何人都可以修改数据,而django可能无法控制他们进行的更新,这可能会导致单元失败测试。

这在another question's answer

中有清楚的解释

如果您的数据库管理员可以为Django用户提供“测试”模块正常运行所需的访问权限,则可以使用“夹具”。固定装置就像数据文件一样,可以从您的开发环境中创建,然后可以在单元测试安装程序中使用,以将固定装置中的数据导入到Django创建的测试数据库中。

任何单元测试框架的最终目的都是使用不太可能改变的数据来测试后端代码逻辑的功能。如上述链接所述,功能测试和回归测试可以覆盖真实的数据库。

有关灯具的更多详细信息,请访问Using Fixtures with Django Test Cases