2012-04-15 2 views
3

Я пытаюсь выкрикнуть вызов метода сохранения на моделях django.Model. Я использую Mock как мою издевательскую библиотеку.Сфокусированная база данных django save

Я тестирую функцию в файле house_factory.py, который находится в apps.deps.house_factory.

house_factory.py: от apps.market.models импорта Дом

def create_house(location, date, price): 
    house = House(id=None, date, price) 
    house.save() 

    # calculate some stuff and further expand the house instance 
    # for example house.tag.add("some-tag") 

    # save after calculations 
    house.save() 

Я хотел бы, чтобы дразнить из модели дома.

class HouseModelMock(mock.Mock): 
    def save(self): 
     pass 

метод тестирования, является частью класса unittest.TestCase

@patch('apps.deps.house_factory.House', new_callable=HouseModelMock) 
    def create_house_test(self, MockedHouse): 

     """ Constants """ 
     DAYS_FROM_TODAY = 55 
     DATE = datetime.date.today() + datetime.timedelta(days=DAYS_FROM_TODAY) 
     PRICE = 250000 

    # A location is also a django module , I'm using factory_boy here for building a 'mocked' location 
     location = LocationFactory.build() 

     create_house(DATE, PRICE) 
     MockedHouse.assert_called_with(None, DATE, PRICE) 
     MockedHouse.save.assert_called_with() 

Если я запускаю этот тест я получаю:

call__ возврата self.call (* ARG, ** kw) MemoryError

Это одна из моих первых попыток серьёзно разобраться с django и тестированием. Так что, возможно, я неправильно настраиваю, чтобы издеваться над вызовом базы данных.

Подходит ни к какой помощи,

Jonas.

ответ

3

«Это одна из моих первых попыток серьёзно разобраться с django и тестированием» ... вам не нужно издеваться над базами данных, как Django автоматически creates a test DB, чтобы запустить тестовый набор против всякий раз, когда вы запускаете python manage.py test. Затем просто укажите значения, хранящиеся в вашей БД.

В идеале mock используется для исправления собственных тестов (и логики), а не для Django по умолчанию.

Подсказка: используйте в дб памяти в для модульных тестов, таких как sqlite поставить ниже в файле settings.py:

if 'test' in sys.argv: 
    DATABASES['default']['ENGINE'] = 'sqlite3' 

Это позволит значительно ускорить ваш тестовый прогон.

 Смежные вопросы

  • Нет связанных вопросов^_^