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

Cpp*_*ner 18 django django-testing

我仍在使用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):
Run Code Online (Sandbox Code Playgroud)

PyCon2011谈话,第二个是稍微更高效.

这是显示关系的图表:

在此输入图像描述

所以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      |
-----------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

在效率方面,三者中哪一个更好?许多Django开发人员在测试时都会模拟,因此有时甚至不需要数据库.有没有办法在我们运行时不创建表格manage.py test myapp.MyClass?对于旧版本(1.3之前),哪一个更好?

Chr*_*lor 14

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

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

一般来说,您最有可能使用Django的TestCase子类之一.通常这将是django.test.TestCase,为了提高效率,将测试包装在数据库事务中并使用回滚来"撤消"数据库中的测试.如果您需要手动管理测试中的事务,则需要使用django.test.TransactionTestCase,因为您无法在事务中启动/回滚事务.

有一些小问题需要使用django.test.TestCase,请参阅此处的注释以获取更多信息.

也:

如果您只是想找到一种更快地运行测试的方法,请查看在内存运行测试,并且(如果您使用的是South),设置SOUTH_TESTS_MIGRATE = Falsesyncdb在创建测试时告诉South使用(更快)DB,而不是运行迁移.

  • @eLRuLL是的,但你可以"从django.test导入TestCase作为DjangoTestCase"或类似的东西来解决冲突 (4认同)