django.test.TestCase 与 unittest 与 django.utils.unittest.TestCase 之间的区别

2024-03-06

我仍在使用 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(使用前将#替换为@)

django.test.TestCase 与 unittest 与 django.utils.unittest.TestCase 之间的区别 的相关文章

随机推荐