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>I would take an entirely different approach.</p>

<pre><code>class SwitchViewTest(TestCase):

  class SwitchViewStub(SwitchView):
    """ Stub out class under test """
    def __init__(self):
    """ Bypass Constructor """
      self.args = None
      ... #  Fill in the rest

  def setUp():
    self.helper = self.SwitchViewStub()
    self.helper.method_to_mock = MagicMock(...)
    ...

  def test_override_class_patching(self):
    with mock.patch.object(self.helper, 'method_to_mock', ...):
      ...
</code></pre>

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