我有一个测试,我正在模拟对经理的过滤器调用。断言看起来像这样:
filter_mock.assert_called_once_with(type_id__in=[3, 4, 5, 6], finance=mock_finance, parent_transaction__date_posted=tran_date_posted)
并且正在测试的代码如下所示:
agregates = Balance.objects.filter(
finance=self.finance,type_id__in=self.balance_types,
parent_transaction__date_posted__lte=self.transaction_date_posted
)
我认为,由于这些是kwargs,顺序无关紧要,但测试失败,即使每对的值都匹配。以下是我看到的错误:
到底发生了什么事? kwarg命令应该无关紧要,即使我命令匹配测试所声称的内容,测试仍然会失败。AssertionError:预期的调用:filter(type_id__in = [3,4,5,6], parent_transaction__date_posted = datetime.datetime(2015,5,29,16,22, 59,532772),finance =)实际通话时间: 过滤器(type_id__in = [3,4,5,6],finance =, parent_transaction__date_posted__lte = datetime.datetime(2015,5,29, 16,22,59,532772))
答案 0 :(得分:3)
你的钥匙不完全一样。在assert_called_with
,您拥有密钥parent_transaction__date_posted
,但在您的代码中,您使用的是密钥parent_transaction__date_posted__lte
。这就是导致测试失败的原因,而不是错误的排序。以下是我自己的测试作为概念证明:
>>> myobject.test(a=1, b=2)
>>> mock_test.assert_called_with(b=2, a=1)
OK
>>> myobject.test(a=1, b__lte=2)
>>> mock_test.assert_called_with(b=2, a=1)
AssertionError: Expected call: test(a=1, b=2)
Actual call: test(a=1, b__lte=2)
您需要更正您的测试或代码,以便它们匹配(包括__lte或不要根据您的需要)