首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一个MagicMock实例分配给另一个MagicMock实例的return_value

将一个MagicMock实例分配给另一个MagicMock实例的return_value
EN

Stack Overflow用户
提问于 2018-03-22 14:43:39
回答 1查看 296关注 0票数 2

我试图模拟一个MagicMock实例的函数的返回值,但结果并不像我预期的那样:

代码语言:javascript
复制
>>> f = mock.MagicMock() # => <MagicMock id='139903823124048'>
>>> g = mock.MagicMock() # => <MagicMock id='139903823522512'>
>>> f.goo.return_value = g 
>>> g                    # => <MagicMock name='mock.goo()' id='139903823522512'>

实例g没有改变,但是它的名称改变了?当我尝试的时候:

代码语言:javascript
复制
>>> f.goo(1,2)
>>> g.zoo('a')
>>> f.goo(3,4)
>>> f.goo.assert_has_calls([call(1,2), call(3,4)])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/lando/.local/lib/python2.7/site-packages/mock/mock.py", line 969, in assert_has_calls
    ), cause)
  File "/home/lando/.local/lib/python2.7/site-packages/six.py", line 737, in raise_from
    raise value
AssertionError: Calls not found.
Expected: [call(1, 2), call(3, 4)]
Actual: [call(1, 2), call().zoo('a'), call(3, 4)]

为什么g的呼叫成为f.goo呼叫的一部分?甚至:

代码语言:javascript
复制
>>> f.goo.call_args_list # => [call(1, 2), call(3, 4)]
EN

回答 1

Stack Overflow用户

发布于 2018-03-22 15:29:44

这种行为不是很直观,但却是按预期进行的。请看-

https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock.assert_has_calls https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock.mock_calls

对返回值的调用也会在mock_calls中进行跟踪。

使用any_order标志。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49422167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档