mirror of
https://github.com/django/django.git
synced 2025-07-24 05:36:15 +00:00
Fixed #31395 -- Made setUpTestData enforce in-memory data isolation.
Since it's introduction in Django 1.8 setUpTestData has been suffering from a documented but confusing caveat due to its sharing of attributes assigned during its execution with all test instances. By keeping track of class attributes assigned during the setUpTestData phase its possible to ensure only deep copies are provided to test instances on attribute retreival and prevent manual setUp gymnastic to work around the previous lack of in-memory data isolation. Thanks Adam Johnson for the extensive review.
This commit is contained in:
parent
1dd96f731d
commit
3cf80d3fcf
6 changed files with 178 additions and 12 deletions
|
@ -873,11 +873,13 @@ It also provides an additional method:
|
|||
(for instance, MySQL with the MyISAM engine), ``setUpTestData()`` will be
|
||||
called before each test, negating the speed benefits.
|
||||
|
||||
Be careful not to modify any objects created in ``setUpTestData()`` in
|
||||
your test methods. Modifications to in-memory objects from setup work done
|
||||
at the class level will persist between test methods. If you do need to
|
||||
modify them, you could reload them in the ``setUp()`` method with
|
||||
:meth:`~django.db.models.Model.refresh_from_db`, for example.
|
||||
.. versionchanged:: 3.2
|
||||
|
||||
Objects assigned to class attributes in ``setUpTestData()`` must
|
||||
support creating deep copies with :py:func:`copy.deepcopy` in order to
|
||||
isolate them from alterations performed by each test methods. In
|
||||
previous versions of Django these objects were reused and changes made
|
||||
to them were persisted between test methods.
|
||||
|
||||
.. _live-test-server:
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue