如何在使用ctypes.byref作为参数之一的Python中模拟ctypes函数

如何在使用ctypes.byref作为参数之一的Python中模拟ctypes函数,python,unit-testing,mocking,Python,Unit Testing,Mocking,我正在开发一个DLL/SO的Python包装器。我已经验证了调用实际DLL的代码是否有效,等等。我想对我的包装进行单元测试,而不需要安装底层DLL/SO。我正在考虑使用 我遇到的问题是采用byref参数并以这种方式返回值的函数。例如,如果C基金看起来像这样: int initialize(char *resource, ulong *new_handle) { // Some code here *new_handle = temp_handle; return erro

我正在开发一个DLL/SO的Python包装器。我已经验证了调用实际DLL的代码是否有效,等等。我想对我的包装进行单元测试,而不需要安装底层DLL/SO。我正在考虑使用

我遇到的问题是采用byref参数并以这种方式返回值的函数。例如,如果C基金看起来像这样:

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))
我能够模拟该函数并设置返回值(错误代码),但我还无法确定如何设置会话句柄中返回的值


这可能吗?如果可能,如何实现?

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

x is ctypes.byref(x)._obj
或者至少,你现在可以。这是一个未记录的API,可能会发生更改

拥有对象后,可以通过其
属性,以通常的ctypes方式设置其值:

byref_session_handle._obj.value = whatever