如何在Django中测试一个空的查询集?

mar*_*rue 13 django unit-testing

我正在测试Django中的一个视图,该视图应该从对象中删除所有标记.为此,我使用这个断言:

self.assertEqual(list(Tag.objects.get_for_object(Animal.objects.get(pk=1))),[])
Run Code Online (Sandbox Code Playgroud)

这很有效,因为我得到一个空列表作为回报.我将Django查询集包装在列表中以避免这种情况:

AssertionError: [] != []
Run Code Online (Sandbox Code Playgroud)

将空Django查询集与空列表进行比较.

但由于这不是我喜欢的东西,我想知道是否有更好的方法来进行测试.

Chr*_*att 32

只是用 exists

self.assertFalse(Tag.objects.get_for_object(Animal.objects.get(pk=1)).exists())
Run Code Online (Sandbox Code Playgroud)


Ber*_*ant 9

self.assertEqual(Tag.objects.get_for_object(Animal.objects.get(pk=1).count(), 0)
Run Code Online (Sandbox Code Playgroud)

len()如果要强制执行作为列表计算的查询集,也可以使用!

或者也assertQuerysetEqual很有用,您可以与实例0f进行比较django.db.models.query.EmptyQuerySet!但count()在大多数情况下使用应该是最快的方法!