gpt4 book ai didi

python - 如何在 Django 上模拟关系

转载 作者:行者123 更新时间:2023-12-01 06:22:11 24 4
gpt4 key购买 nike

我目前遇到了问题,我不知道如何模拟关系。

假设我有一个名为

的模型
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

我有一些像这样的存储库类:

class MyModelRepository:
@staticmethod
def get_related_model(my_model):
try:
return my_model.related_model
except MyModel.related_model.RelatedObjectDoesNotExist:
# do some other thing

为此编写单元测试时,如何模拟 lated_model 来引发此异常或返回某个任意实例?

最佳答案

这是一种无需 unittest.mock 即可实现的方法:

class MockRelatedModel:
@property
def related_model(self):
raise MyModel.related_model.RelatedObjectDoesNotExist()

如果您确实想使用unittest.mock,您可以使用PropertyMock 。请注意,这尚未经过测试。坦率地说,我认为创建一个没有设置 related_model 的 MyModel 实例并调用 MyModelRepository.get_lated_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)

关于python - 如何在 Django 上模拟关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60310571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com