2017-06-16 420 views
0

我正在对DLL/SO进行Python包装。我已经验证了调用实际DLL和SO的代码。我想单元测试我的包装,而不需要底层DLL/SO被安装。我正在寻找使用mock如何在Python中使用ctypes.byref作为参数之一来模拟ctypes函数

我遇到的问题是采用byref参数和返回值的函数。例如,如果C fundtion看起来是这样的:

int initialize(char *resource, ulong *new_handle) 
{ 
    // Some code here 
    *new_handle = temp_handle; 
    return error; 
} 

和Python代码看起来像:

error_code = library.initialize(resource.encode('ascii'), ctypes.byref(session_handle)) 

我能嘲笑的功能和设置的返回值(错误代码)但我一直无法弄清楚如何设置session_handle中返回的值。

这是可能的,如果是这样,如何?

回答

0

您可以通过返回值的_obj属性访问传递给byref对象:

x is ctypes.byref(x)._obj 

或者至少,你可以为现在。这是一个无证API,可能会有变化。

一旦有了对象,你可以通过它value属性设置它的值通常ctypes的方式:

byref_session_handle._obj.value = whatever 
相关问题