【问题标题】:difference between django.test.TestCase vs unittest vs django.utils.unittest.TestCasedjango.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.unittestdjango.test 继承自unittestunittest2

我不确定以下是否正确。请帮忙编辑。

 ________________________________________________________________
|  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 之前),哪个更好?

【问题讨论】:

    标签: django django-testing


    【解决方案1】:

    Django 的TestCase 增强了unittest.TestCase 的一些额外功能:

    • 自动加载夹具。
    • 将每个测试包装在一个事务中。
    • 创建一个 TestClient 实例。
    • Django 特定的断言,用于测试重定向和表单错误等内容。

    一般来说,您应该很可能使用 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
    猜你喜欢
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 2021-09-20
    • 2012-03-23
    • 2016-07-20
    • 2015-05-07
    • 1970-01-01
    相关资源
    最近更新 更多