Python Django测试运行程序不尊重unittest.TestCase?
对于我的一个功能测试,我决定使用Python Django测试运行程序不尊重unittest.TestCase?,python,django,functional-testing,Python,Django,Functional Testing,对于我的一个功能测试,我决定使用unittest.TestCase而不是Django测试类,因为在清理测试时可以方便地直接访问测试本身中的本地开发数据库 在隔离状态下运行测试,正如我预期的那样: $python manage.py test functional\u tests.test\u功能 系统检查未发现任何问题(0静音)。 ... ---------------------------------------------------------------------- 在0.040秒内
unittest.TestCase
而不是Django测试类,因为在清理测试时可以方便地直接访问测试本身中的本地开发数据库
在隔离状态下运行测试,正如我预期的那样:
$python manage.py test functional\u tests.test\u功能
系统检查未发现任何问题(0静音)。
...
----------------------------------------------------------------------
在0.040秒内运行了3次测试
好啊
但是,当我尝试同时运行所有测试时,该测试会出现错误,抱怨对象没有texist
,就好像它在使用Django测试数据库一样:
$python manage.py测试功能测试
正在为别名“default”创建测试数据库。。。
系统检查未发现任何问题(0静音)。
E
======================================================================
错误:某些功能测试(功能测试。功能测试。功能测试)
----------------------------------------------------------------------
回溯(最近一次呼叫最后一次):
... 等
app.models.Object.DoesNotExist:对象匹配查询不存在。
----------------------------------------------------------------------
在0.226秒内进行了21次测试
失败(错误=1)
正在销毁别名“default”的测试数据库。。。
我假设错误是在Django的测试数据库中不存在对象时,我尝试使用Object.objects.latest('created')
是否有某种方法可以防止Django将所有测试包装在任何关于测试运行程序的内容中,从而阻止我的测试直接访问对象?首先进行一点解释
默认情况下,当您运行/manage.py test
django test runner时,只需执行几个步骤,其中包括创建测试数据库(在每个数据库名称前添加test\uu
前缀)、运行迁移和销毁测试数据库(可以找到有关运行程序步骤的更多详细信息)
对django如何处理测试数据库进行了很好的解释
在您的情况下,当您单独运行unittest.TestCase
时,不会创建任何测试数据库:
$python manage.py test functional\u tests.test\u功能
系统检查未发现任何问题(0静音)。
...
----------------------------------------------------------------------
在0.040秒内运行了3次测试
好啊
(^没有关于创建测试数据库的日志)
这是因为没有调用django.test.TestCase
。我们可以从(当django.TestCase时,virginunittest.TestCase
没有数据库
属性)中看到它
但是,当您调用整个模块(python manage.py test functional_tests
)时,您的套件中似乎有一些django.test.TestCase
测试,这就是创建新测试数据库的原因:
$python manage.py测试功能测试
正在为别名“default”创建测试数据库…#如果其他上下文有帮助,我将针对本地服务器上运行的API端点运行功能测试。我正在测试一个create方法,并试图避免必须对端点请求DELETE来清理测试创建的测试记录。我不太担心意外的数据丢失,因为测试是在本地开发数据库上运行的。我很感激这些信息。承认Django处理测试用例的方式,我的问题是如何强制特定测试在测试数据库/测试事务之外运行。在这个特殊的例子中,我的意图是让测试在本地数据库上运行,而不是包装在Django事务中。稍后我会更新我的答案,谢谢你的支持clarifications@Derek看来我知道你的情况了,我已经完全更新了我的答案,请看