django.test.TestCase vs unittest vs django.utils.unittest.TestCase 之间的区别
Posted
技术标签:
【中文标题】django.test.TestCase vs unittest vs django.utils.unittest.TestCase 之间的区别【英文标题】:difference between django.test.TestCase vs unittest vs django.utils.unittest.TestCase 【发布时间】:2012-04-21 07:58:42 【问题描述】:我仍在使用 Django 1.2.1,我认为对于较新的 Django,我们不使用 import unittest
,然后使用 unittest.TestCase
。
插图
import unittest
class TestThis(unittest.TestCase):
from django.utils.unittest import TestCase
class TestThis(TestCase):
from django.test import TestCase
class TestThis(TestCase):
根据PyCon2011 talk,第二个稍微效率更高。
这是显示关系的diagram:
所以django.utils.unittest
和django.test
继承自unittest
或unittest2
。
我不确定以下是否正确。请帮忙编辑。
________________________________________________________________
| Name | Django Version | Python Version |
-----------------------------------------------------------------
| unittest | >= 1.0 | >= 2.6 |
-----------------------------------------------------------------
| django.utils.unittest | >= 1.3 | ?? |
-----------------------------------------------------------------
| django.test | >= 1.0 | >= 2.6 |
| - SimpleTestCase >= 1.4 >= 2.7 |
| - LiveServerTestCase >= 1.4 >= 2.7 |
-----------------------------------------------------------------
就效率而言,三者中哪一个更好?许多 Django 开发人员在测试时进行模拟,因此有时甚至不需要数据库。当我们运行 manage.py test myapp.MyClass
时,有没有办法不创建表?对于旧版本(1.3 之前),哪个更好?
【问题讨论】:
【参考方案1】:Django 的TestCase
增强了unittest.TestCase
的一些额外功能:
一般来说,您应该很可能使用 Django 的 TestCase 子类之一。通常这将是django.test.TestCase
,为了提高效率,它将测试包装在数据库事务中并使用回滚来“撤消”数据库中的测试。如果您需要在测试中手动管理事务,则需要使用django.test.TransactionTestCase
,因为您无法在事务中启动/回滚事务。
使用django.test.TestCase
有一些小注意事项,有关详细信息,请参阅注释here。
还有:
如果您只是在寻找一种更快地运行测试的方法,请查看 running your tests in memory,并且(如果您使用的是 South),请设置 SOUTH_TESTS_MIGRATE = False
以告诉 South 使用 a(更快) syncdb
创建测试数据库时,而不是运行迁移。
【讨论】:
我创建了一个 django 应用程序,我的 test.py 文件中有一个继承自 TestCase 的示例类,我只导入了 TestCase 来自 django.test。如果我导入unittest.TestCase,会不会有冲突? @eLRuLL 是的,但是您可以执行“从 django.test 导入 TestCase 作为 DjangoTestCase”或类似的操作来解决冲突 很好的提示,我不知道。 使用django.test.TestCase
的警告链接是404ing以上是关于django.test.TestCase vs unittest vs django.utils.unittest.TestCase 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
用于创建数据库、运行测试的 Django / postgres 设置
在功能齐全的 django 应用程序中测试 POST 时出现 405 错误
字符串编码中的 Python-3 和 \x Vs \u Vs \U 以及为啥