我正在尝试编写检查功能参数的单元测试:
def test_my_function():
my_function = mock.patch('mymodule.myclass.myfuction')
我的功能在mymodule中看起来像这样:
from ctypes import POINTER, WinDLL, c_int, cast, pointer, byref
class myclass:
def myfunction():
# some logic
测试失败并显示错误消息:
ImportError: cannot import name WinDLL
因此,我正在尝试在测试中模拟补丁
ctypes.WinDLL
:mocker.patch('ctypes.WinDLL')
my_function = mock.patch('mymodule.myclass.myfuction')
得到错误:
AttributeError: <module 'ctypes' from '/usr/lib/python2.7/ctypes/__init__.pyc'> does not have the attribute 'WinDLL
我无法模拟WinDll补丁,因为如果客户端使用Windows,则
ctypes
定义WinDLL
。我的操作系统是Linux。有可能解决这个问题吗?
最佳答案
我自己找到了解决方案。默认情况下,mocker.patch
仅修补定义的属性。通过传递参数create=True
可以模拟不存在的属性:mocker.patch('ctypes.WinDLL', create=True)