我仍在使用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之前),哪一个更好?
答案 0 :(得分:13)
Django TestCase
通过一些额外的功能增强unittest.TestCase
:
一般来说,您最有可能使用Django的TestCase子类之一。通常这将是django.test.TestCase
,为了提高效率,它将测试包装在数据库事务中,并使用回滚来“撤消”数据库中的测试。如果您需要在测试中手动管理事务,则需要使用django.test.TransactionTestCase
,因为您无法在事务中启动/回滚事务。
使用django.test.TestCase
时有一些小问题,请参阅说明here以获取更多信息。
ALSO:
如果您只是想找到更快地运行测试的方法,请查看running your tests in memory和(如果您使用的是南方),请设置SOUTH_TESTS_MIGRATE = False
告诉South使用(快得多)syncdb
在创建测试数据库时,而不是运行迁移。