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