Commit dffdca11 authored by Tim Graham's avatar Tim Graham
Browse files

Fixed #20316 - Clarified transaction behavior of TestCase.

Thanks uberj@ for the report and lolek09 for the patch.
parent 5a62236b
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -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