python中的__next___python-如何模拟对__next__的调用

您需要使用MagicMock而不是Mock来使__next__这样的魔术方法默认可用:

>>> from unittest import mock

>>> mock_coroutine = mock.MagicMock()

>>> mock_coroutine.__next__()

>>> mock_coroutine.__next__.assert_called_with()

Mock allows you to assign functions (or other Mock instances) to magic methods and they will be called appropriately. The MagicMock class is just a Mock variant that has all of the magic methods pre-created for you (well, all the useful ones anyway).

因此,或者,您仍然可以使用常规的Mock对象,但是随后您需要显式添加该属性:

>>> mock_coroutine = mock.Mock()

>>> mock_coroutine.__next__ = mock.Mock()

>>> mock_coroutine.__next__()

这是因为尽管Mock在您访问属性时即刻创建属性,但是带有前划线和后划线的任何属性都明确地免于此.参见this footnote:

The only exceptions are magic methods and attributes (those that have leading and trailing double underscores). Mock doesn’t create these but instead raises an AttributeError. This is because the interpreter will often implicitly request these methods, and gets very confused to get a new Mock object when it expects a magic method. If you need magic method support see 07002.

但是请注意,魔术方法通常是要在类而不是实例上查找的,因此直接将__next__属性添加到Mock实例仍然会失败. MagicMock类将为您解决此特定问题.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值