I need to create some kind of MockMixin
for my tests. It should include mocks for everything that calls external sources.
For example, each time I save model in admin panel I call some remote URLs. It would be good, to have that mocked and use like that:
class ExampleTestCase(MockedTestCase):
# tests
So each time I save model in admin, for example in functional tests, this mock is applied instead of calling remote URLs.
Is that actually possible? I'm able to do that for 1 particular test, that is not a problem. But it'd be more useful to have some global mock because I use it a lot.
According to the
mock
documentation:This basically means that you can create a base test class with
@patch
decorator applied on it that would mock your external calls while every test method inside would be executed.Also, you can use
start()
andstop()
patcher's methods insetUp()
andtearDown()
methods respectively:Just to add to alecxe's answer, if you are using
teardown()
then according to the docsIf an exception is raised in your tests, your patching won't be undone. A better way would be to call
addCleanup()
inside yoursetUp()
. Then you can omit thetearDown()
method altogether.