【问题标题】:Test django model with foreign key to another model使用另一个模型的外键测试 django 模型
【发布时间】:2017-08-30 00:11:31
【问题描述】:

我想测试一个特定的模型,而不必担心它具有外键 (FK) 的另一个模型。

假设我的模型 Bundle 需要我的其他模型会话的外键: models.py:

class Bundle(ModelCommon):
    session = models.ForeignKey(verbose_name=_('Session'), to=Session, default=None, null=False, blank=False)
    available = models.BooleanField(verbose_name=_('Available'), default=True, null=False, blank=False)

当我尝试在test_models.py 上使用 Mock 测试我的 Bundle 类时(因为我不需要关心 Session 对象中的字段值):

def setUp(self):
    MockSession = mock.create_autospec(Session)
    self.test_session = MockSession()
    self.bundle = Bundle(session=self.test_session, name='Mega Bundle', enabled=True, available=True, price=0)

def test_event_enabled_is_default_false(self):
    session = Session()
    self.assertFalse(session.enabled)

我不断收到这条消息:

Error
Traceback (most recent call last):
File "test_models.py", line 181, in setUp
    self.bundle = Bundle(session=self.test_session, name='Mega Bundle', enabled=True, available=True, price=0)
    raise AttributeError("Mock object has no attribute %r" % name)
AttributeError: Mock object has no attribute '_state'

问题如下:在这种情况下使用测试替身的绝对正确方法是什么?因为到目前为止我还没有成功使用过一个。

【问题讨论】:

    标签: python django unit-testing testing mocking


    【解决方案1】:

    看起来您正试图通过 autospec 模拟在 Session.__init__ 中设置的属性,这是不可能的。你可以在这个相关的question中查看更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-03
      • 2017-06-01
      • 2021-01-26
      相关资源
      最近更新 更多