首页 > 解决方案 > django unittest 使用“真实”数据库

问题描述

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

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

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

标签: djangodjango-viewsdjango-unittest

解决方案


我认为这个问题的主要原因是因为您的 django 数据库用户没有提供创建/删除数据库权限。

为了进行单元测试,Django 需要创建和删除一个测试数据库。它不能为此目的使用现有数据库。为什么我们不允许在单元测试中使用现有数据库是因为,任何拥有相同数据库权限的人都可以修改数据,并且 django 可能无法控制他们所做的更新,这可能会导致单元不成功测试。

这在另一个问题的答案中得到了清楚的解释

如果您的 DB 管理员可以为您的 Django 用户提供测试模块按预期工作所需的访问权限,您可以使用 Fixtures。Fixtures 就像数据文件,可以从您的开发环境中创建,然后可以在单元测试设置中用于将数据从 Fixtures 导入到 Django 创建的测试数据库中。

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

有关夹具的更多详细信息,请访问将夹具与 Django 测试用例一起使用


推荐阅读