【发布时间】:2014-10-15 01:56:00
【问题描述】:
我正在开发一个配置非常不寻常的 Django API 项目(我认为): 我确实有两个 Django 项目:一个是主 API,一个是用户 API。每当我使用主 API 创建用户时,用户实际上是在用户 API 的数据库中创建的(我使用 http 请求在两个 API 之间进行通信)。在主 API 中,我保留了一个仅包含唯一 ID 的用户表。在用户 API 中创建用户时,它使用与主 API 中相同的唯一 ID 创建。 我必须这样做,因为在生产中,我必须将数据存储在不同的服务器中。
现在我的问题来了。
我想为我的主要 API 编写测试(例如测试用户创建、用户更新、用户删除)。问题是当我运行测试时,我必须运行代表用户 API 的单独的 Django 实例(使用另一个端口)。运行测试时,Django 为主 API 创建了一个测试数据库,但由于我使用 http 请求与用户 API 通信,因此没有用于用户 API 的测试数据库,因此我必须在运行所有测试后刷新数据库。到目前为止,我使用了 unittest 库,一切都很好。但我希望能够在测试期间覆盖一些设置(例如,用户 API 的地址是一个设置,我想为测试使用不同的地址)。为此,我必须使用 django.test.TestCase 但我有以下问题:
想象一下,我有一个创建用户 A 的 test_a 方法和一个创建用户 B 的 test_b 方法。使用 django.test.TestCase,运行 test_a,使用 id 1 创建用户 A。然后我相信测试数据库(主 API 的)被刷新,因为当 test_b 运行时,用户 B 也被创建为 id 1。问题是在两次测试之间,用户 API 的数据库没有刷新,所以我得到一个错误,因为我无法在测试数据库中创建用户 B。
我正在寻找一种优雅的方式来处理这个问题,但我真的不知道。
(对不起,这很长,但我想精确一点)。
【问题讨论】:
标签: python database django unit-testing