发现了一些奇怪的东西。
mockito的基本行为允许在函数上使用spy2来模拟指定参数的方法。
例子:
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做同样的尝试
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能像平常一样打开。相反,将引发此错误:
mockito.invocation.InvocationError:
Called but not expected:
open('__init__.py')
Stubbed invocations are:
open('not_existing_file.csv')Mockito似乎也希望builtins.open("_init_.py")也会受到嘲笑。
你知道是什么引起了这个问题吗?非常感谢!
发布于 2022-07-20 19:20:00
可能是一个bug (如果它是可行的)或限制,因为builtins通常是硬的。builtins.open实际上指向了_io.open。在spy2(builtins.open)之后,builtins.open是未修补的,但_io.open是。
令人惊讶的是,spy2('builtins.open')做你想做的事情。
https://stackoverflow.com/questions/73039174
复制相似问题