我使用模擬更換一個Django模型,它的配置如下:你如何聲明Django的QuerySet.count()方法在模擬上被調用?
>>> config = {'objects.filter.return_value.count.return_value': 1}
>>> MockModel = Mock(**config)
我可以查詢一些值,然後在調用的結果.count()
:
>>> # This works as expected
>>> MockModel.objects.filter(foo='bar').count()
1
然而當我斷言,這些方法被稱爲,模擬引起了TypeError
因爲 count
是模擬的call
的方法:
>>> MockModel.assert_has_calls([
call.objects.filter(foo='bar'),
call.objects.filter().count(),
])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-78-bf4e954d856f> in <module>()
1 MockModel.assert_has_calls([
2 call.objects.filter(foo='bar'),
----> 3 call.objects.filter().count()
4 ])
TypeError: count() takes exactly one argument (0 given)
雖然,你可以看到,這個調用並在mock_calls
存在:
>>> MockModel.mock_calls
[
call.trait_names(),
call._getAttributeNames(),
call.objects.filter(foo='bar'),
call.objects.filter().count(), # How do you test for this?
...
]
所以我的問題是這樣的:你如何斷定count()
拜訪了一個模擬Django的查詢集?
你可以這樣做:'聲明MockModel.objects.filter()。count.called',但如果調用的順序很重要,這並不能給你提供正確的信息。 – 2013-04-18 02:07:50