例如,我的型号
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
...