Вопрос по – Разница между django.test.TestCase и unittest против django.utils.unittest.TestCase

17

Я все еще использую Django 1.2.1, и я думаю, что с более новым Django мы не используемimport unittest а затем сделатьunittest.TestCase.

Illustration

<code>import unittest
class TestThis(unittest.TestCase):

from django.utils.unittest import TestCase
class TestThis(TestCase):

from django.test import TestCase
class TestThis(TestCase):
</code>

В соответствии сPyCon2011 talkвторойslightly более эффективным.

Здесьдиаграмма показывая отношения:

enter image description here

Такdjango.utils.unittest а такжеdjango.test наследовать от любогоunittest или жеunittest2.

Я не уверен, верно ли следующее или нет. Пожалуйста, помогите редактированию.

<code> ________________________________________________________________
|  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      |
-----------------------------------------------------------------
</code>

Что касается эффективности, какой из трех лучше? Многие разработчики Django издеваются над тестами, поэтому иногда базы данных даже не нужны. Есть ли способ не создавать таблицы, когда мы запускаемmanage.py test myapp.MyClass ? Для более старой версии (до 1.3) какая лучше?

Ваш Ответ

1   ответ
12

TestCase Усиливаетunittest.TestCase с некоторыми дополнительными функциями:

Automatic loading of fixtures. Wraps each test in a transaction. Creates a TestClient instance. Django-specific assertions for testing for things like redirection and form errors.

Вообще говоря, вам, скорее всего, следует использовать один из подклассов Django TestCase. Обычно это будетdjango.test.TestCaseкоторый для эффективности оборачивает тест в транзакцию БД и использует откат до «отменить»; тест в БД. Если вам нужно вручную управлять транзакциями в вашем тесте, вам нужно будет использоватьdjango.test.TransactionTestCase, поскольку вы не можете запустить / откатить транзакцию внутри транзакции.

Есть несколько небольших предостережений при использованииdjango.test.TestCaseсм. примечаниеВот для дополнительной информации.

ТАКЖЕ:

Если вы просто ищете способ ускорить выполнение тестов, взгляните назапуск ваших тестов в памятии (если вы используете Юг) установитеSOUTH_TESTS_MIGRATE = False сказать югу использовать (намного быстрее)syncdb при создании тестовой БД, а не при выполнении миграций.

отличный совет, я этого не знал.
@eLRuLL да, но вы можете сделать из "django.test" импорт TestCase как DjangoTestCase & quot; или что-то похожее для разрешения конфликта
Ссылка для предостережения к использованиюdjango.test.TestCase 404ing
Я создал приложение django, и у меня в файле test.py есть пример класса, унаследованного отTestCase и я только импортировалTestCase отdjango.test, Если я импортируюunittest.TestCaseэто будет конфликт?

Похожие вопросы