我使用的是python@mok.patch装饰器,我想设置像model.objects.filter这样的查询的retu



例如,我的型号

class Mymodel(models.Model):
name = models.CharField()
age = models.IntegerField()

例如,在我看来,我正在使用这个型号作为

class MyView(generics.ListAPIView):
serializerClass = MySerrializer

def get(self, req, *args, **kwargs):
res = Mymodel.objects.filter(age=25)
serializer = self.get_serializer(res, many=true)
return Response(serializert.data)

现在,例如,我正在为View 编写一个测试用例

@mock.patch('views.Mymodel.objects.filter')
def test_MyView(filtered_result):
filtered_result.return_value = ???

现在我应该如何设置返回值,如果它是Mymodel.objects.get我会这样设置

filtered_result.return_value = Mymodel(name="xyz", age=30)

现在对于Mymodel.objects.filter我必须在django QuerySet中打包一些Mymodel实例吗?

要做到这一点,你可以在打补丁之前创建一个假模型,假设你没有任何数据要测试,你可以为过滤器创建一个新的模型实例:

class FakeModel:
@staticmethod
def filter():
return Mymodel.objects.create(name="xyz", age=30)

然后将这个FakeModel作为return_value=FakeModel()传递给您的补丁。

因此,您将为mock_my_model变量传递该值。

最后,您可以将这个mock_my_model变量传递给mock_my_model.filter.return_value

@mock.patch(
'apis.views.Mymodel.objects.filter',
return_values=FakeModel(),
)
def test_MyView(mock_my_model):
mock_my_model.filter.return_value = mock_my_model
...

最新更新