模拟Django的数据库

2024-09-29 06:32:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我在模拟django上的save方法调用模型。模型. 我用Mock作为我的Mock库。在

我在档案室测试一个功能_工厂.py,位于apps.deps.house_工厂. 在

房子_工厂.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()

我想模仿一下房子模型。在

^{pr2}$

测试方法,是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()

如果我做这个测试,我会得到一个:

呼叫__ 返回自我呼唤(*arg,**千瓦) 记忆错误

这是我第一次尝试认真对待django和测试。所以也许我把事情搞错了,去模仿数据库调用。在

感谢任何帮助

乔纳斯。在


Tags: appsdjangodepspy模型date工厂save
1条回答
网友
1楼 · 发布于 2024-09-29 06:32:31

“这是我第一次尝试认真对待django和测试”。。。当您运行python manage.py test时,您不需要将数据库保存自动模拟为Django,creates a test DB来运行测试套件。然后简单地断言存储在数据库中的值。在

理想情况下,mock用于修补自己的测试(和逻辑),而不是默认的Django测试。在

提示:使用内存中的db进行单元测试,例如sqlite将以下内容放入settings.py文件中:

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

这将大大加快您的测试运行。在

相关问题 更多 >