通过一个./manage.py测试命令运行多个Django测试会导致错误,单独运行每个测试都不会

时间:2014-11-18 01:32:47

标签: django unit-testing

我在一个Django项目中通过多个应用程序进行了一系列单元测试(TransactionTestCase的所有子类)。当我使用./manage.py test一次性运行所有这些时,在其中一个测试中发生错误。但是当我单独运行每个应用程序的测试时,使用./manage.py test my_project.app_name一次一个,我没有错误。

我得到的具体错误是modelform_factory中的FieldError,但我的问题不是关于此错误的具体解决方案。我只是好奇Django中所谓的自包含测试用例之间可能出现的数据/进程/任何可能出现的问题。有什么想法吗?

(对于好奇的,如果我把我的所有测试子类放在TestCase(而不是TransactionTestCase)中,我会得到一堆不同的错误,但是我已经将这些错误归结为一些与回滚问题有关的问题。 Django封装每个测试用例的事务。但谁知道,也许有连接?)

1 个答案:

答案 0 :(得分:0)

找到答案:

无论在一次./manage.py test调用期间运行了多少个不同的测试用例,无论在测试之间数据库被回滚/截断多少(对于TestCase和TransactionTestCase),所有测试都在< em>相同的python线程和所有模型基类的相同实例。因此,线程中的任何变量或对类定义的任何修改都会在测试实例中持续存在。

就我而言,两者都是。视图从当前运行的线程中获取了一个用户实例,但该用户在先前的测试已回滚时已被删除。稍后,视图修改了在其父类中声明(作为空白列表)的列表,从而将父类列表更改为不是空白列表,并在以后的测试中导致问题。