class TransactionTestCase
[source]
TransactionTestCase
inherits from SimpleTestCase
to add some database-specific features:
- Resetting the database to a known state at the beginning of each test to ease testing and using the ORM.
- Database
fixtures
. - Test skipping based on database backend features.
- The remaining specialized
assert*
methods.
Django’s TestCase
class is a more commonly used subclass of TransactionTestCase
that makes use of database transaction facilities to speed up the process of resetting the database to a known state at the beginning of each test. A consequence of this, however, is that some database behaviors cannot be tested within a Django TestCase
class. For instance, you cannot test that a block of code is executing within a transaction, as is required when using select_for_update()
. In those cases, you should use TransactionTestCase
.
TransactionTestCase
and TestCase
are identical except for the manner in which the database is reset to a known state and the ability for test code to test the effects of commit and rollback:
- A
TransactionTestCase
resets the database after the test runs by truncating all tables. ATransactionTestCase
may call commit and rollback and observe the effects of these calls on the database. - A
TestCase
, on the other hand, does not truncate tables after a test. Instead, it encloses the test code in a database transaction that is rolled back at the end of the test. This guarantees that the rollback at the end of the test restores the database to its initial state.
Warning
TestCase
running on a database that does not support rollback (e.g. MySQL with the MyISAM storage engine), and all instances of TransactionTestCase
, will roll back at the end of the test by deleting all data from the test database.
Apps will not see their data reloaded; if you need this functionality (for example, third-party apps should enable this) you can set serialized_rollback = True
inside the TestCase
body.
Please login to continue.