Fixed #20316 - Clarified transaction behavior of TestCase.
Thanks uberj@ for the report and lolek09 for the patch.
This commit is contained in:
parent
5a62236b16
commit
dffdca1109
|
@ -925,14 +925,23 @@ to test the effects of commit and rollback:
|
|||
|
||||
* 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. It also prevents the code under test from
|
||||
issuing any commit or rollback operations on the database, to ensure that the
|
||||
rollback at the end of the test restores the database to its initial state.
|
||||
back at the end of the test. Both explicit commits like
|
||||
``transaction.commit()`` and implicit ones that may be caused by
|
||||
``Model.save()`` are replaced with a ``nop`` operation. This guarantees that
|
||||
the rollback at the end of the test restores the database to its initial
|
||||
state.
|
||||
|
||||
When running on a database that does not support rollback (e.g. MySQL with the
|
||||
MyISAM storage engine), ``TestCase`` falls back to initializing the database
|
||||
by truncating tables and reloading initial data.
|
||||
|
||||
.. warning::
|
||||
|
||||
While ``commit`` and ``rollback`` operations still *appear* to work when
|
||||
used in ``TestCase``, no actual commit or rollback will be performed by the
|
||||
database. This can cause your tests to pass or fail unexpectedly. Always
|
||||
use ``TransactionalTestCase`` when testing transactional behavior.
|
||||
|
||||
.. note::
|
||||
|
||||
.. versionchanged:: 1.5
|
||||
|
|
Loading…
Reference in New Issue