Django TestCase中如何断言查询返回的对象存在?
问题解决:断言数据库对象存在的正确方式
首先明确报错原因:filter().first()方法返回的是匹配查询的单个对象实例(有匹配时)或None(无匹配时),它不是可迭代/集合类型,因此无法用len()获取长度,这就是触发TypeError的原因。
以下是几种正确的断言方式:
直接断言对象存在(不为
None):def test_invalid_trip_location_field_value(self): trip_location_field = TripLocationField.objects.filter(name='Fiji').first() self.assertIsNotNone(trip_location_field)若需同时验证对象的字段值:
def test_invalid_trip_location_field_value(self): trip_location_field = TripLocationField.objects.filter(name='Fiji').first() self.assertIsNotNone(trip_location_field) self.assertEqual(trip_location_field.name, 'Fiji')若要确认数据库中恰好有1个匹配对象(兼顾数量验证):
def test_invalid_trip_location_field_value(self): # 先验证匹配数量 self.assertEqual(TripLocationField.objects.filter(name='Fiji').count(), 1) # 再获取并断言对象存在 trip_location_field = TripLocationField.objects.filter(name='Fiji').first() self.assertIsNotNone(trip_location_field)
内容的提问来源于stack exchange,提问作者AlxVallejo
相关产品推荐
相关产品推荐

