2017-06-16 49 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 
相關問題