使用外键测试django模型到另一个模型

时间:2017-04-04 16:51:31

标签: python django unit-testing testing mocking

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

说我的模型Bundle需要一个外键到我的其他模型Session: 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)

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

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'

以下是问题:在这种情况下使用Test Double的绝对正确方法是什么?因为到目前为止,我还没有成功地使用它。

1 个答案:

答案 0 :(得分:0)

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

中查看有关它的更多信息