【发布时间】:2019-05-04 20:43:10
【问题描述】:
我尝试使用以下命令对 django 进行assertQuerysetEqual 测试,但如果列表中只有一个对象,它们都可以工作,但是当我在列表中插入多个对象以比较两组查询时其中有时会失败,有时会通过,这完全奇怪(使用同一组代码运行)。我用来测试的assertQuerysetEqual 列表来自How do I test Django QuerySets are equal? 和Django 1.4 - assertQuerysetEqual - how to use method 中的另外两个问题以及django 文档。
这可能是因为在比较测试失败时序列不按顺序排列。因为当我打印时 - 我的查询集完全匹配。因为当我运行测试时,有时测试通过,有时当我比较列表中的多个对象时它会失败。我可以告诉他们列表因错误消息而失败时有所不同,但我不明白为什么我使用的命令没有按顺序比较它们。 (他们被接受/赞成的答案)
欢迎任何关于如何永久解决此问题的建议。谢谢。
class TestViews(TestCase):
def setUp(self):
self.client = Client()
self.user = User.objects.create_user(
username='normaluser', email='s@gmail.com', password='secret123')
self.notcreateuser = User.objects.create_user(
username='notcreateuser', email='s@gmail.com', password='secret123')
self.adminuser = User.objects.create_user(
username='adminuser', email='s@gmail.com', password='secret123', is_staff=True)
obj_puser = mixer.blend('users.PUser', user=self.user)
obj_puser_oth = mixer.blend('users.PUser', user=self.notcreateuser)
obj_puser_staff = mixer.blend('users.PUser', user=self.adminuser)
obj_ptype = mixer.blend('polls.Ptype', active=True)
obj_pitem0 = mixer.blend('polls.PollItem', polltype=obj_ptype, user_submit=self.user, allowed=True)
obj_pitem1 = mixer.blend('polls.PollItem', polltype=obj_ptype, user_submit=self.user, allowed=True)
def test_poll_list_view_query(self):
self.client.login(username="normaluser", password="secret123")
ptype_obj = Ptype.objects.get(pk__in=[1])
path = "/polls/"
data = {'type': ptype_obj.slug }
res = self.client.get(path, data)
pitemlist = PollItem.objects.filter(pk__in=[1,2])
#list of assertQuerysetEqual I am testing
self.assertQuerysetEqual(res.context['object_list'], [repr(r) for r in pitemlist])
self.assertQuerysetEqual(res.context['object_list'], pitemlist, transform=lambda x:x)
self.assertQuerysetEqual(res.context['object_list'], map(repr, pitemlist))
【问题讨论】:
标签: django pytest-django