I'd like to replace a method in a class with mock:
from unittest.mock import patch
class A(object):
    def method(self, string):
        print(self, "method", string)
def method2(self, string):
    print(self, "method2", string)
with patch.object(A, 'method', side_effect=method2):
    a = A()
    a.method("string")
    a.method.assert_called_with("string")
...but I get insulted by the computer:
TypeError: method2() missing 1 required positional argument: 'string'
                The side_effect parameter indicates that a call to method should have a call to method2 as a side effect.
What you probably want is to replace method1 with method2, which you can do by using the new parameter: 
with patch.object(A, 'method', new=method2):
Be aware that if you do this, you cannot use assert_called_with, as this is only available on actual Mock objects.
The alternative would be to do away with method2 altogether and just do 
with patch.object(A, 'method'):
This will replace method with a Mock instance, which remembers all calls to it and allows you to do assert_called_with.
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