Статические и Запечатанные классовые различия

Вообще говоря, вы бы 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, спросите себя, действительно ли вам нужно , чтобы издеваться над ним. Если ваш тест является коротким и точным и отлично работает без насмешивания функции, вы можете просто посмотреть на внутреннюю деталь тестируемого кода, а не на объект, который вам нужно высмеять.

139
задан shA.t 4 September 2017 в 13:11
поделиться