我用Mock替换Django模型,配置如下:
>>> config = {'objects.filter.return_value.count.return_value': 1}
>>> MockModel = Mock(**config)
我可以查询一些值,然后对结果调用.count()
:
但是,当我断言这些方法被调用时,Mock会引发一个TypeError
,因为
count
是Mock的一种方法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 QuerySet上调用的?在
call
也是tuple
,因此可以与tuple
相比较:您可以确认:
^{pr2}$来源:https://code.google.com/p/mock/source/browse/mock.py#1988
相关问题 更多 >
编程相关推荐