【发布时间】:2020-08-10 20:57:23
【问题描述】:
对于我的一项功能测试,我决定使用unittest.TestCase 而不是 Django 测试类,因为在清理测试以在测试本身中直接访问我的本地开发数据库时很方便。
像我预期的那样单独运行测试通过:
$ python manage.py test functional_tests.test_functionality
System check identified no issues (0 silenced).
...
----------------------------------------------------------------------
Ran 3 tests in 0.040s
OK
但是,当我尝试同时运行所有测试时,该测试特别出错,抱怨对象 DoesNotExist,好像它正在使用 Django 测试数据库:
$ python manage.py test functional_tests
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
..................E..
======================================================================
ERROR: some_functional_test (functional_tests.test_functionality.FunctionalTest)
----------------------------------------------------------------------
Traceback (most recent call last):
... etc.
app.models.Object.DoesNotExist: Object matching query does not exist.
----------------------------------------------------------------------
Ran 21 tests in 0.226s
FAILED (errors=1)
Destroying test database for alias 'default'...
当 Django 的测试数据库中不存在 Objects 时,我认为错误是我尝试使用 Object.objects.latest('created')。
有什么方法可以防止 Django 将所有测试包装在与测试运行器有关的任何东西中,从而阻止我的测试直接访问 Object?
【问题讨论】:
-
如果一些额外的上下文有帮助,我正在对本地服务器上运行的 API 端点运行功能测试。我正在测试一个 create 方法,并且我试图避免必须针对端点请求 DELETE 以清理由测试创建的测试记录。我不太担心意外的数据丢失,因为测试是针对本地开发数据库运行的
标签: python django functional-testing