我正在测试Django中的一个视图,它应该从一个对象中删除所有标签。为此,我使用这个Assert:
self.assertEqual(list(Tag.objects.get_for_object(Animal.objects.get(pk=1))),[])
这很好,因为我得到了一个空列表作为回报。我把Django的queryset封装在一个列表中以避免这种情况:
AssertionError: [] != []
其中一个空的Django查询集与一个空的列表进行比较。
但由于这不是我喜欢的东西很多,我想知道是否有一个更好的方法来做这个测试。
4条答案
按热度按时间jdg4fx2g1#
使用
exists
即可krugob8w2#
如果你想强制查询集作为一个列表来计算,你也可以使用
len()
!另外,
assertQuerysetEqual
也很有用,你可以与django.db.models.query.EmptyQuerySet
的示例进行比较!但是在大多数情况下使用count()
应该是最快的方法!busg9geu3#
克里斯的回答在这种情况下有效。但是,您也可以用途:
lc8prwob4#
正如@Bernhard所指出的,你可以使用
self.assertQuerysetEquals
,并将你的查询集与一个空的查询集进行比较,尽管这是一个优雅的解决方案,但它可能不是有效的。其他解决方案也是有效的,但这里是我的:
我强烈建议不要转换列表中的django查询集。这是因为将查询集转换为列表需要将所有查询集加载到内存中,并在Python对象中进行转换。
为此目的,存在queryset方法
count()
,exists()
等。