Override the class patch with method patch (decorator)
<p>I have several test methods in a class that use one type of patching for a object, so I have patched with class decorator. For a single another method i want to patch the same object differently. I tried the following approach, but the patch made as class decorator is in effect despite the method itself being decorated with different patch. I expected method patch to override class patch. Why is this not the case?</p>

<p>In this particular case I can remove class patch and patch individual methods, but that would be repetitive. How can I implement such overriding (method overrides class patch) mechanism?  </p>

<pre><code>from unittest TestCase
from unittest import mock

@mock.patch('my_module.cls.method', mock.Mock(side_effect=RuntimeError('testing'))
class SwitchViewTest(TestCase):

    def test_use_class_patching(self):
        # several other methods like this
        # test code ..

    @mock.patch('my_module.cls.method', mock.Mock(side_effect=RuntimeError('custom'))
    def test_override_class_patching(self):
        # test code ...
</code></pre>

<p>This can only work if the class decorator is written to account for the use of method decorators.  Although the class decorator appears first, it can only run after the class object has been created, which happens after all of the methods have been defined (and decorated).</p>

<p>Class decorators run <em>after</em> method decorators, not before.</p>

python unit-testing tdd python-unittest python-unittest.mock