diff options
author | Rick Harris <rconradharris@gmail.com> | 2013-05-16 08:02:21 +0000 |
---|---|---|
committer | Rick Harris <rconradharris@gmail.com> | 2013-05-16 18:15:31 +0000 |
commit | 4e560d49d4a8d08341dae6df5e123e1be1b3c779 (patch) | |
tree | 32ff274a42922f35cf447b898a52923769203149 /nova/utils.py | |
parent | 56f5172f33bbd1da1b8749b7754805de44c3ab9c (diff) | |
download | nova-4e560d49d4a8d08341dae6df5e123e1be1b3c779.tar.gz nova-4e560d49d4a8d08341dae6df5e123e1be1b3c779.tar.xz nova-4e560d49d4a8d08341dae6df5e123e1be1b3c779.zip |
Mox should cleanup before stubs
Tests that define both Mox and Stubs may not receive a proper cleanup by the
`TestCase` base class. The reason is that the order in which the Mox and Stubs
are unset may not necessarily match-up with the order in which the tests
called them. For example:
Suppose we have a test that Stubs a method in its `setUp` and then Mox's that
same method in the test body:
Stub: Original-Func -> Stubbed-Func
Mox: Stubbed-Func -> Mocked-Func
Now when `TestCase` ultimately does its `cleanUp`, it will UnStub before
UnMocking:
UnStub: Stubbed-Func -> Original-Func
UnMox: Mocked-Func -> Stubbed-Func
Notice that generic cleanup has mistakingly left `Stubbed-Func` in place.
Given that Stubs and Mox can be performed in any order, the upshot here is
that the generic cleanup can't always be relied on.
The proposed solution has two parts: a best-practice change and a small
code-change.
The code-change is to reverse the current order to UnMox before UnStubbing.
While in theory the order is arbitrary, in practice, we have lots of Stubs in
`setUp` methods already, so UnMox'ing first makes sense (and it fixes a
current bug to boot!)
The best-practice change is to recommend against stubbing and mocking the same
function as well as to always place stubs before mocks when relying on the
generic cleanup. If a developers needs to deviate from this, cleanup of stubs
created after mocks are their responsibility.
Fixes bug 1180671
Change-Id: I42ab8b55026c0a133625a7cc81ed8b960e9d47d7
Diffstat (limited to 'nova/utils.py')
0 files changed, 0 insertions, 0 deletions