2016-07-07 32 views
2

我有一個模擬功能:GoogleTest如何使用InvokeArgument隨着WithArg

MOCK_METHOD4(my_func, int(double, double, void* (*cb) (int), int p1)); 

我想要調用第二(從0開始)上面的函數的與所述第三參數作爲參數變量,即,調用「CB」功能以「p1」作爲參數。我怎樣才能做到這一點?

我可以調用「CB」使用InvokeArgument一些自定義的值:

ON_CALL(mockObj, my_func(_, _, _, _)). 
       WillByDefault(DoAll(
         IgnoreResult(InvokeArgument<2>(10)), 
         Return(0))); 

但我想傳遞給相同的嘲笑函數調用的實際參數來調用它。在序列

回答

1

由於DoAll流程操作,您可以第三個參數的值保存到一個外部變量,然後調用與該變量作爲參數的第二個參數。

int p; 
ON_CALL(mockObj, my_func(_, _, _, _)). 
      WillByDefault(DoAll(
        SaveArg<3>(&p), 
        IgnoreResult(InvokeArgument<2>(p)), 
        Return(0))); 
1

您可以定義一個ACTION來調用您的回調。類似下面:

ACTION(CallCb) { 
    arg2(arg3); 
} 

... 

ON_CALL(*mockObj, my_func(_, _, _, _)) 
    .WillByDefault(
    DoAll(CallCb(), 
      Return(0))); 
0

不幸的是,結合WithArgInvokeArgument不起作用。但是,你可以使用Invoke並匹配傳遞給嘲笑方法的回調函數。事情是這樣的:

EXPECT_CALL(*m_pInstallManagerMock, my_func(_, _, my_callback, _)). 
      WillOnce(DoAll(
        WithArg<3>(IgnoreResult(Invoke(my_callback))), 
        Return(0)));