2017-06-09 53 views
1

我有一個簡單模擬類:Object參數來模擬EXPECT_CALL

class MockCanInterface : public lib::CanInterface { 
public: 
    MockCanInterface() : CanInterface({"mock"}) {} 

    MOCK_METHOD1(Write, bool(const lib::CanFrame& frame)); 
    MOCK_METHOD1(Read, bool(lib::CanFrame* frame)); 
}; 

在測試代碼我想將對象傳遞到Write方法。有沒有辦法與.With條款做到這一點?它直接與傳遞參數一起工作,但現在與.With。代碼編譯,但在執行期間失敗 - 對象的大小是正確的,但數據不是。

這工作:

EXPECT_CALL(can_, Write(expected_command_)) 
     .WillOnce(Return(true)); 

這不:

EXPECT_CALL(can_, Write(_)) 
     .With(Args<0>(expected_command_)) 
     .WillOnce(Return(true)); 

我承認,有可能是一些在路上丟失代碼設置的預期目標。

回答

0

我認爲重點是:Write()方法需要通過引用傳遞的CanFrame參數。

我建議使用操作由GMock提供:
SetArgReferee - 引用或值
SetArgPointee - 指針

你可以找到例子,更here

但是這種解決方案對我的作品,我也希望你們)

EXPECT_CALL(can_, Write(_)) 
     .WillOnce(SetArgReferee<0>(expected_command_)); 

或返回值:

EXPECT_CALL(can_, Write(_)) 
     .WillOnce(DoAll(SetArgReferee<0>(expected_command_), Return(true))); 
+0

感謝您的解決方案。你是否嘗試過使用'const lib :: CanFrame&'來模擬'Write'的代碼?我一直得到這個錯誤'錯誤:傳遞'const lib :: CanFrame'作爲'this'參數丟棄限定符' – ilya1725

+0

你是對的。它只適用於非const引用。我找不到一個const引用參數的解決方案。然而,我在這裏留下我的答案,也許這有助於找到正確的答案。 – Soeren

相關問題