gpt4 book ai didi

django - 测试 drf serializer validate 的最佳方法是什么

转载 作者:行者123 更新时间:2023-11-28 19:52:08 25 4
gpt4 key购买 nike

我想两种方法如何测试 drf 序列化器验证

以下是我的序列化验证码

def validate_md5(self, md5):
if len(md5) != 40:
raise serializers.ValidationError("Wrong md5")
return md5

测试代码

1)

def test_wrong_validate_md5_2(self):
url = reverse('apk-list')
response = self.client.post(url, {'md5':'test'}, format='json')
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

2)

def test_wrong_validate_md5(self):
serializer = ApkSerializer(data=self.apk)

if len(self.apk.get('md5')) != 40:
self.assertEqual(serializer.is_valid(), False)
else:
self.assertEqual(serializer.is_valid(), True)

什么比另一个更好?还是有最好的解决方案?

并且...我练习测试驱动编码。是否需要像上面那样写测试代码

最佳答案

第一种方法实际上不测试序列化器类。它正在测试整个 'apk-list' 端点。由于错误不仅可能在序列化器的 validate_md5 方法中引发,而且在任何其他地方,即使 self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) 将被传递,你也不能确保序列化程序按预期工作。所以第二种方法更可取。但是不要在一个测试用例中使用 if/else,您最好创建两个不同的测试用例:一个用于正确数据,另一个用于不正确数据,您还可以检查错误是否与 md5 字段相关:

def test_wrong_validate_md5(self):
serializer = ApkSerializer(data=self.apk_wrong)
self.assertEqual(serializer.is_valid(), False)
self.assertEqual(set(serializer.errors.keys()), set(['md5']))

def test_correct_validate_md5(self):
serializer = ApkSerializer(data=self.apk_correct)
self.assertEqual(serializer.is_valid(), True)

UPD

也可以使用第一种方法,但在这种情况下您需要解析响应数据。并使用“md5”键检查此数据是否包含错误,例如:

def test_wrong_validate_md5_2(self):
url = reverse('apk-list')
response = self.client.post(url, {'md5':'test'}, format='json')
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertEqual(response.data,{'md5': Wrong md5')

关于django - 测试 drf serializer validate 的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49270520/

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