Python 无法使用_退出_方法创建mockito mock

Python 无法使用_退出_方法创建mockito mock,python,unit-testing,mockito,attributeerror,contextmanager,Python,Unit Testing,Mockito,Attributeerror,Contextmanager,在测试中,我无法将\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu方法附加到mockito mock,以便mock在with语句中使用时不会介意 下面是一个不断引发AttributeError:\uuuu退出\uuuu的测试示例: #main.py 类管理器(对象): 定义输入(自我): 打印“连接” 定义退出(自身、exc类型、exc val、exc tb): 打印“断开连接” def foo(self): 打印“Foo” def功能待测试(管理器): #类型:(FooManag

在测试中,我无法将
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
方法附加到mockito mock,以便mock在
with
语句中使用时不会介意

下面是一个不断引发
AttributeError:\uuuu退出\uuuu
的测试示例:

#main.py
类管理器(对象):
定义输入(自我):
打印“连接”
定义退出(自身、exc类型、exc val、exc tb):
打印“断开连接”
def foo(self):
打印“Foo”
def功能待测试(管理器):
#类型:(FooManager)->None
与经理:
经理:foo()
#test.py
从mockito导入mock,在任何情况下验证
def test():
经理\u mock=mock()
#所有这些都不会产生任何影响:
经理模拟。退出=lambda a,b,c:无
当(管理器\u模拟)。\u\u退出(任意(),任意(),任意())。然后返回(无)
要测试的功能(经理模拟)
验证(manager\u mock,times=1).foo()
解决我问题的唯一解决方案是:

class ContextManagerMock(mock):
定义输入(自我):
一无所获
定义退出(自身、exc类型、exc val、exc tb):
一无所获
def test():
manager\u mock=ContextManagerMock()
要测试的功能(经理模拟)
验证(manager\u mock,times=1).foo()

但是,我想知道,当我试图通过
when
函数或lambda函数附加
\uuu exit\uuuu
方法时,为什么会出现
AttributeError

您可能只是缺少了需要模拟
\uu enter\uu
的内容

In [24]: m = mock()

In [25]: when(m).__enter__(...)
Out[25]: <mockito.invocation.AnswerSelector at 0x13db478>

In [26]: when(m).__exit__(...)
Out[26]: <mockito.invocation.AnswerSelector at 0x501bd00>

In [27]: with m: ...

In [28]: verify(m).__enter__()

In [29]:
[24]中的
m=mock()
在[25]:当(m)时输入
出[25]:
在[26]:当(m)退出时
出[26]:
在[27]中:带m:。。。
在[28]中:验证(m)。\u输入
在[29]中:
如果我不模仿
\uuuuu输入\uuuu
,我会得到一个
属性错误:\uuuuu输入\uuuu