Using mock.patch to disable a function behavior

Viewed 812

I have a function adding subscription for my users. At the end of this function, an instruction check the subscriptions and do some stuff with patron if necessary. For my testing, I need to skip this last instruction ; so I tried to use mock.patch but despite all my tries, the code is always executed (and my tests failed)


mymodule/classes.py

class User:

    def add_subscription(self, start_date, end_date):
        subscriptions = self.get('subscriptions', [])
        subscriptions.append({'start': start_date, 'end': end_date})
        self['subscriptions'] = subscriptions
        check_subscriptions(self)  # <-- skip this instruction for unitesting


def check_subscriptions(user):
    print("Not need to print for unitesting")
    # next doing more stuff...
    ...

tests/user_unitest.py

import mock
from mymodule.classes import User
from datetime import datetime, timedelta

...

def test_subscriptions(user_with_no_subscription_fixture):
    user = user_with_no_subscription_fixture
    start = datetime.now()
    end = start + timedelta(days=10)
    user.add_subscription(start, end)
    ...

How can I use the @mock.patch (or other mock function) to don't enter into the User.check_subscriptions methods ?


What I tried (and didn't work)

@mock.patch('mymodule.classes.check_subscriptions')
def test_subscriptions(user_with_no_subscription_fixture):
    user = user_with_no_subscription_fixture
    start = datetime.now()
    end = start + timedelta(days=10)
    user.add_subscription(start, end)
def test_subscriptions(user_with_no_subscription_fixture):
    with mock.patch('mymodule.classes.check_subscriptions'):
        user = user_with_no_subscription_fixture
        start = datetime.now()
        end = start + timedelta(days=10)
        user.add_subscription(start, end)
@mock.patch('mymodule.classes.check_subscriptions', MagicMock())
def test_subscriptions(user_with_no_subscription_fixture):
    user = user_with_no_subscription_fixture
    start = datetime.now()
    end = start + timedelta(days=10)
    user.add_subscription(start, end)
@mock.patch('mymodule.classes.check_subscriptions', side_effect=...)
def test_subscriptions(user_with_no_subscription_fixture):
    user = user_with_no_subscription_fixture
    start = datetime.now()
    end = start + timedelta(days=10)
    user.add_subscription(start, end)

thanks for your always usefull help

0 Answers
Related