Тестирование ручных транзакций внутри юнит-тестов Django - PullRequest
0 голосов
/ 04 июля 2018

Как вы тестируете код, который отключает автокоммит и использует точки сохранения, внутри юнит-теста Django?

Класс unitjt по умолчанию Django объединяет все тесты в декораторе @atomic, который обычно является именно тем, что вам нужно, чтобы гарантировать сброс базы данных sqlite между тестами. Однако любой код, который касается transaction.set_autocommit() из теста, выдает ошибку:

TransactionManagementError: This is forbidden when an 'atomic' block is active.

, даже если он отлично работает вне юнит-теста.

Как временно отключить автокоммит транзакций в модульном тесте, чтобы можно было проверять фиксации вручную?

1 Ответ

0 голосов
/ 04 июля 2018

Использование TransactionTestCase:

TransactionTestCase и TestCase идентичны, за исключением способа сброса базы данных в известное состояние и возможности тестового кода для проверки эффектов фиксации и отката: A TransactionTestCase сбрасывает базу данных после Тест запускается путем усечения всех таблиц. TransactionTestCase может вызывать фиксацию и откат и наблюдать влияние этих вызовов на базу данных.

...