Насмешка над моделью Django и save()

У меня следующий сценарий:

в моем файле models.py

class FooBar(models.Model):
    description = models.CharField(max_length=20)

в моем файле utils.py.

from models import FooBar

def save_foobar(value):
    '''acts like a helper method that does a bunch of stuff, but creates a 
    FooBar object and saves it'''

    f = FooBar(description=value)
    f.save()

в test.py

from utils import save_foobar

@patch('utils.FooBar')
def test_save_foobar(self, mock_foobar_class):

    save_mock = Mock(return_value=None)
    mock_foobar_class.save = save_mock

    save_foobar('some value')

    #make sure class was created
    self.assertEqual(mock_foobar_class.call_count, 1) #this passes!!!

    #now make sure save was called once
    self.assertEqual(save_mock.call_count, 1) #this fails with 0 != 1 !!!

Это упрощенная версия того, что я пытаюсь сделать... поэтому, пожалуйста, не зацикливайтесь на том, почему у меня есть файл utils и вспомогательная функция для этого (в реальной жизни он делает несколько вещей). Кроме того, обратите внимание, что, несмотря на упрощение, это реальный рабочий пример моей проблемы. Первый вызов проверки call_count возвращает 1 и проходит успешно. Однако второй возвращает 0. Итак, похоже, что мой патч работает и вызывается.

Как проверить, не только создается ли экземпляр FooBar, но и вызывается ли для него метод сохранения?

6
задан David S 11 May 2012 в 03:30
поделиться