class MyClass:
def __init__(self, a, b):
self.a = a
self.b = b
def myFunc():
myClass = MyClass(1, 2)
print(myClass.a, myClass.b)
In my test, I want to run myFunc()
but inside myFunc()
I want myClass
to return 'test1'
and 'test2'
as its a
and b
attributes.
So I did this:
with patch('__main__.MyClass') as MockClass:
instance = MockClass.return_value
instance.a.return_value = 'test1'
instance.b.return_value = 'test2'
myFunc()
However, the result is <MagicMock name=MyClass().a' id='2938383'>
..... Instead of simply 'test1'
and 'test2'
.
What am I doing wrong? What am I misunderstanding about how to use mock?
return_value
is for callables, just write:
with patch('__main__.MyClass') as MockClass:
instance = MockClass.return_value
instance.a = 'test1'
instance.b = 'test2'
myFunc()
# test1 test2
And you have to patch
the class in the with-statement, note the capital letter of Class in '__main__.MyClass'
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With