Issue 35577: side_effect mocked method lose reference to instance (original) (raw)

When a method/bounded function is mocked and side_effect is supplied to it, the side_effect function doesn't get the reference to the instance.

Suppose we have something like this

class SomeClass: def do_something(self, x): pass

def some_function(x): cls = SomeClass() y = class.do_something(x) return y

And the test for some_function will be

def do_something_side_effect(x): retrun x

def test_some_function(): with mock.path("SomeCass.do_something") as do_something_mock: do_something_mock.side_effect = do_something_side_effect assert some_function(1)

Here do_something_side_effect mock will not have access to SomeClass instance.

Is there a problem with:

from unittest import mock

class SomeClass: def do_something(self, x): pass

def some_function(x): obj = SomeClass() y = obj.do_something(x) return y

def do_something_side_effect(self, x): print(self) return x

def test_some_function(): with mock.patch.object(SomeClass, "do_something", do_something_side_effect): assert some_function(1)

?