[英]How to mock relations on Django
I'm currently running into a problem, I can't figure out how to mock a relation.我目前遇到了一个问题,我不知道如何模拟关系。
Let's say I have some model called假设我有一些模型叫做
class MyModel(models.Model):
name = models.CharField(max_length=10)
class RelatedModel(models.Model):
my_model = models.OneToOneField(MyModel, on_delete=models.CASCADE, related_name='related_model')
name = models.CharField(max_length=10
And I have some repository class like this:我有一些这样的存储库类:
class MyModelRepository:
@staticmethod
def get_related_model(my_model):
try:
return my_model.related_model
except MyModel.related_model.RelatedObjectDoesNotExist:
# do some other thing
When writing unit-tests for this how can I mock the related_model
to raise this exception or return some arbitrary instance?当编写单元测试为了这个,我怎么能嘲笑
related_model
提出这个异常,或者返回一些任意的实例?
Here's a way to do it without unittest.mock
:这是一种无需
unittest.mock
:
class MockRelatedModel:
@property
def related_model(self):
raise MyModel.related_model.RelatedObjectDoesNotExist()
If you do want to use unittest.mock
you can use PropertyMock .如果你想使用
unittest.mock
你可以使用PropertyMock 。 Note, this hasn't been tested.请注意,这尚未经过测试。 And frankly, I think it might be easier to create an instance of
MyModel
without the related_model set on it and call MyModelRepository.get_related_model
.坦率地说,我认为在没有设置
MyModel
情况下创建MyModel
的实例并调用MyModelRepository.get_related_model
可能更容易。
with patch('path.to.MyModel', new_callable=PropertyMock) as mock_model:
mock_model.related_model.side_effect = MyModel.related_model.RelatedObjectDoesNotExist()
instance = MyModel()
MyModelRepository.get_related_model(instance)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.