首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python库spy2不使用builtins.open

Python库spy2不使用builtins.open
EN

Stack Overflow用户
提问于 2022-07-19 14:53:24
回答 1查看 36关注 0票数 1

发现了一些奇怪的东西。

mockito的基本行为允许在函数上使用spy2来模拟指定参数的方法。

例子:

代码语言:javascript
复制
mockito.spy2(os.path.exists)
mockito.when(os.path).exists('.flake8').thenReturn("mdr")

print(os.path.exists("folder_that_doesnt_exist"))
print(os.path.exists(".flake8"))
mockito.unstub()

返回False,然后按预期返回True。如果参数不是“os.path.exists”,则.flake8的行为是正常行为。

但是如果我对builtins.open做同样的尝试

代码语言:javascript
复制
mockito.spy2(builtins.open)
mockito.when(builtins).open("not_existing_file.csv").thenReturn("test")

print(builtins.open("not_existing_file.csv"))
print(builtins.open("__init__.py"))
mockito.unstub()

我希望__init__.py能像平常一样打开。相反,将引发此错误:

代码语言:javascript
复制
   mockito.invocation.InvocationError: 
   Called but not expected:
   
       open('__init__.py')
   
   Stubbed invocations are:
   
       open('not_existing_file.csv')

Mockito似乎也希望builtins.open("_init_.py")也会受到嘲笑。

你知道是什么引起了这个问题吗?非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-20 19:20:00

可能是一个bug (如果它是可行的)或限制,因为builtins通常是硬的。builtins.open实际上指向了_io.open。在spy2(builtins.open)之后,builtins.open是未修补的,但_io.open是。

令人惊讶的是,spy2('builtins.open')做你想做的事情。

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

https://stackoverflow.com/questions/73039174

复制
相关文章

相似问题

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