我正在尝试编写检查功能参数的单元测试:

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)

07-24 15:44