覆盖范围显示测试get_serializer_class为未经测试

时间:2018-04-21 14:02:32

标签: django django-rest-framework python-unittest django-testing django-tests

使用coverage来显示测试drf视图必须涵盖的内容。并且覆盖率显示所有视图都经过测试(由unittest + dango客户端API覆盖)

但是报道显示需要涵盖这一部分:

def get_serializer_class(self): 
    return self.serializer_class ` 

我认为该代码可能因为无用而删除(这不是我的代码):)

知道如何在GenericAPIView中涵盖过去的代码吗?感谢任何帮助

1 个答案:

答案 0 :(得分:1)

指定序列化程序类有两种方法:

  1. 第一种方法是在您的班级中设置serializer_class属性。
  2. 第二种方法是覆盖get_serializer_class()方法。
  3. 如果您已经在课程中添加了serializer_class属性(第一种方法),那么get_serializer_class()肯定是无用的。

    这是一个例子:

    from django.contrib.auth.models import User
    from myapp.serializers import UserSerializer
    from rest_framework import generics
    
    class UserList(generics.GenericAPIView):
        queryset = User.objects.all()
        serializer_class = UserSerializer
    

    在大多数情况下,您应该使用第一种方法,因为通常您只需要一个用于API视图的序列化程序。第二种方法对于动态行为很有用,例如使用不同的串行器进行读写操作,或者为不同类型的用户提供不同的序列化器。

    示例:

    def get_serializer_class(self):
        if self.request.user.is_staff:
            return StaffSerializer
        return BasicSerializer