AssertionErroronUnittestsafterconvertingaDRFSerializertoaDRFModelSerializer
创始人
2024-09-20 15:31:00
0次

在将DRF Serializer转换为DRF ModelSerializer后,在进行单元测试时可能会遇到AssertionError错误。这是因为它们在处理空值(null)方面的方式不同。Serializer将空值序列化为null,而ModelSerializer将其视为有效值。因此,对于ModelSerializer,我们需要使用allow_null=True来处理空值。下面是代码示例:

from rest_framework import serializers

class MySerializer(serializers.Serializer):
    some_field = serializers.IntegerField()

class MyModelSerializer(serializers.ModelSerializer):
    some_field = serializers.IntegerField(allow_null=True)

    class Meta:
        model = MyModel
        fields = '__all__'

在进行单元测试时,我们需要相应地修改测试用例,以处理由空值引起的错误。在Serializer中,我们可以使用assertEqual(None, result.data)来测试结果是否为空。如果我们使用了ModelSerializer,则必须改为使用assertEqual(None, result.data['some_field'])。

代码示例:

from django.test import TestCase
from rest_framework.test import APIClient
from myapp.models import MyModel
from myapp.serializers import MySerializer, MyModelSerializer

class MyTestCase(TestCase):
    def setUp(self):
        self.client = APIClient()
        self.test_data = {'some_field': None}
        self.test_model = MyModel.objects.create(some_field=None)

    def test_serializer(self):
        serializer = MySerializer(data=self.test_data)
        self.assertTrue(serializer.is_valid())
        result = serializer.save()
        self.assertEqual(None, result.some_field)

    def test_model_serializer(self):
        serializer = MyModelSerializer(data=self.test_data)
        self.assertTrue(serializer.is_valid())
        result = serializer.save()
        self.assertEqual(None, result.some_field)

    def test_get(self):
        response = self.client.get('/my/model/{}/'.format(self.test_model.pk))
        self.assertEqual(response.status_code, 200)
        self.assertEqual(None, response.data['some_field'])

注意,我们需要在Serializer和ModelSerializer两个测试用例中都包含一个测试。在这些测试中,通过使用allow_null=True来处理空值,以保证单元测试的正确性。

相关内容

热门资讯

玩家必看科普辅助器技巧!中至汾... 玩家必看科普辅助器技巧!中至汾阳麻将多功能辅助器技巧,中至汾阳麻将一贯有辅助器技巧1、玩家可以在中至...
免费测试版辅助器插件!云鹤九霄... 免费测试版辅助器插件!云鹤九霄多功能辅助器插件,云鹤九霄一直存在有辅助器插件1、全新机制【云鹤九霄a...
专业讨论辅助技巧!闲来麻将多功... 专业讨论辅助技巧!闲来麻将多功能辅助技巧,闲来麻将原来是有辅助技巧该软件可以轻松地帮助玩家将闲来麻将...
发现一款辅助攻略!中至赣州麻将... 发现一款辅助攻略!中至赣州麻将多功能辅助攻略,中至赣州麻将总是真的是有辅助攻略进入游戏-大厅左侧-新...
一起来讨论作弊器攻略!指尖四川... 一起来讨论作弊器攻略!指尖四川麻将多功能作弊器攻略,指尖四川麻将果然真的是有作弊器攻略1、不需要AI...
玩家必看教程透视器app!天听... 玩家必看教程透视器app!天听之旅多功能透视器app,天听之旅本来真的有透视器app1.天听之旅 选...
热点推荐作弊器插件!欢乐划水麻... 热点推荐作弊器插件!欢乐划水麻将多功能作弊器插件,欢乐划水麻将确实是真的有作弊器插件小薇(辅助器软件...
分享开挂内幕辅助技巧!无锡麻将... 分享开挂内幕辅助技巧!无锡麻将多功能辅助技巧,无锡麻将都是存在有辅助技巧1、很好的工具软件,可以解锁...
玩家科普透视挂攻略!青橙竞技多... 玩家科普透视挂攻略!青橙竞技多功能透视挂攻略,青橙竞技一直存在有透视挂攻略青橙竞技脚本下载中分为三种...
大神推荐作弊器教程!桂麻圈多功... 大神推荐作弊器教程!桂麻圈多功能作弊器教程,桂麻圈果然有作弊器教程桂麻圈辅助器是一种具有地方特色的麻...