问题描述
前几天,我试图展示如何将autospec=True
与Python的嘲笑补丁一起使用,并以os.listdir
为例。我是这样做的:
stuff.py
import os
def do_something():
if not os.listdir('/tmp/fnord',these='are',totally='not',valid='arguments'):
print('Well,that was cool')
else:
print('Neato cheeto')
test.py
import stuff
import unittest.mock as mock
def test_stuff():
with mock.patch('os.listdir',return_value=[],autospec=True):
stuff.do_something()
然后我和pytest test.py
一起跑
我期望这会失败,因为autospec=True
。相反,它很容易成功。我认为,也许我不了解os.listdir的界面,但是:
>>> help(os.listdir)
Help on built-in function listdir in module posix:
listdir(path=None)
...
好吧……这正是我所期望的。那有什么呢?仅仅是因为它是一个内置函数吗?它只是缺乏正确的内省吗?我注意到当我创建自己的类时,有一个__code__
属性,我可以得到__code__.co_argcount
,但是os.listdir
中却没有。
这是怎么回事?为什么自动指定不能与os.listdir
一起正常工作?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)