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)
?