I'm familiar with other mocking libraries in other languages such as Mockito in Java, but Python's mock
library confuses the life out of me.
I have the following class which I would like to test.
class MyClassUnderTest(object): def submethod(self, *args): do_dangerous_things() def main_method(self): self.submethod("Nothing.")
In my tests, I'd like to make sure that the submethod
was called when main_method
was executed and that it was called with the right arguments. I don't want submethod
to run, as it does dangerous things.
I'm entirely unsure as to how to get started with this. Mock's documentation is incredibly hard to understand and I'm not sure what to even mock or how to mock it.
How can I mock the submethod
function, while leaving the functionality in main_method
alone?
There are two ways to mock functions: Either by creating a mock function to use in test code, or writing a manual mock to override a module dependency.
When you create a mock, you create an associated behavior object that controls mock behavior. Use this object to define mock method and property behavior (stub). For more information on creating a mock, see Create Mock Object.
I think what you are looking for is mock.patch.object
with mock.patch.object(MyClassUnderTest, "submethod") as submethod_mocked: submethod_mocked.return_value = 13 MyClassUnderTest().main_method() submethod_mocked.assert_called_once_with(user_id, 100, self.context, self.account_type)
Here is small description
patch.object(target, attribute, new=DEFAULT, spec=None, create=False, spec_set=None, autospec=None, new_callable=None, **kwargs)
patch the named member (attribute) on an object (target) with a mock object.
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