Вообще говоря, вы бы datetime
или, возможно, datetime.date
импортировали в модуль где-нибудь. Более эффективным способом издеваться над этим методом было бы его исправление на модуле, который импортирует его. Пример:
a.py
from datetime import date
def my_method():
return date.today()
Затем для вашего теста сам макет-объект будет передан в качестве аргумента методу тестирования. Вы должны настроить макет с требуемым значением результата, а затем вызвать ваш метод под тестированием. Тогда вы утверждаете, что ваш метод сделал то, что вы хотите.
>>> import mock
>>> import a
>>> @mock.patch('a.date')
... def test_my_method(date_mock):
... date_mock.today.return_value = mock.sentinel.today
... result = a.my_method()
... print result
... date_mock.today.assert_called_once_with()
... assert mock.sentinel.today == result
...
>>> test_my_method()
sentinel.today
Слово предупреждения. Конечно, можно смеяться от насмешек. Когда вы это делаете, это делает ваши тесты более продолжительными, трудными для понимания и невозможными для поддержания. Прежде чем вы издеваетесь над таким простым методом, как datetime.date.today
, спросите себя, действительно ли вам нужно , чтобы издеваться над ним. Если ваш тест является коротким и точным и отлично работает без насмешивания функции, вы можете просто посмотреть на внутреннюю деталь тестируемого кода, а не на объект, который вам нужно высмеять.