Впервые работаю с MagicMock, и я думаю, что запутался.
Тестирование проекта django, поэтому в файле с именем services.py
у меня есть эти важные элементы (крайне упрощенные и с вырезанием многих битов, конечно):
from django.template.loader import get_template
class Email:
def send_success_attempt_email(self):
template = get_template('emails/foo.html')
Я хочу проверить, что при вызове send_success_attempt_email
вызывается get_template
с правильными аргументами. Поэтому я написал тест с патчем:
@patch('django.template.loader.get_template')
def test_email_template_should_be_used(self, get_template):
email = Email()
email.send_success_attempt_email()
print(get_template.call_count)
get_template.assert_called_with('emails/foo.html')
Который печатает 0
вместо call_count
и выдает
AssertionError nose.proxy.AssertionError:
Expected call: get_template('emails/foo.html')
Not called
Я видел, что распространенной ошибкой является исправление неправильного экземпляра, но я пробовал много вариантов исправления (например, @patch('services.get_template')
), но хотя это и изменяет ошибку (nose.proxy.EncodeError: Can't pickle <class 'unittest.mock.MagicMock'>: it's not the same object as unittest.mock.MagicMock
), это не облегчает ее.
Я знаю, что у меня должно быть фундаментальное непонимание. Что это такое?
@patch('services.get_template')
сработает, но он выдает странную ошибку, которую я отредактировал в своих вопросах, чтобы подчеркнуть странность. - person fildred13   schedule 14.04.2016...services.get_template
, так как сервисы могут быть загружены до того, как вы исправите, и сохраните исходную ссылкуget_template
до того, как вы ее исправите. - person Marco A.   schedule 14.04.2016