我仍在使用 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 演讲 http://pycon-2012-notes.readthedocs.org/en/latest/testing_and_django.html,第二个是slightly更高效。
这里是diagram https://docs.djangoproject.com/en/dev/topics/testing/#testcase显示关系:
So django.utils.unittest
and django.test
继承自任一unittest
or 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 之前),哪个更好?
姜戈的TestCase
增强unittest.TestCase
有一些额外的功能:
- 自动装载夹具。
- 将每个测试包装在事务中。
- 创建一个 TestClient 实例。
- 用于测试重定向和表单错误等内容的 Django 特定断言。
一般来说,您很可能应该使用 Django 的 TestCase 子类之一。通常这将是django.test.TestCase
,为了提高效率,它将测试包装在数据库事务中,并使用回滚来“撤消”数据库中的测试。如果您需要在测试中手动管理事务,则需要使用django.test.TransactionTestCase
,因为您无法在事务中启动/回滚事务。
使用时有一些小注意事项django.test.TestCase
,参见注释here https://docs.djangoproject.com/en/stable/topics/testing/tools/#transactiontestcase了解更多信息。
ALSO:
如果您只是在寻找一种更快地运行测试的方法,请查看在内存中运行测试 https://stackoverflow.com/questions/3096148/how-to-run-djangos-test-database-only-in-memory,并且(如果您使用的是 South),设置SOUTH_TESTS_MIGRATE = False
告诉南使用(更快)syncdb
创建测试数据库时,而不是运行迁移。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)