2014-11-05 55 views
1

我想在我的單元測試中使用gmock。我寫了一個非常簡單的例子,它失敗了。 ISymbolTable是我想要模擬的接口。 MockSymbolTable是模擬對象。在測試中,我調用插入並檢查是否調用了任何插入。gmock忽略「有趣」的函數調用

GMOCK警告:

無趣模擬函數調用 - 直接返回。函數調用: 插入(8字節對象< 24-7C 4C-04 03-00 00-00>)堆棧跟蹤: LexerTests.cpp:25:失敗實際函數調用計數不匹配 EXPECT_CALL(symbolTable,insert (::測試:: _))...

class ISymbolTable { 
public: 
    ISymbolTable() {} 
    virtual ~ISymbolTable() {}; 
    virtual void insert(const Entry entry) = 0; 
    virtual int lookUp(const std::string text) = 0; 
}; 

class MockSymbolTable : public ISymbolTable { 
public: 
    MOCK_METHOD1(insert, void(const Entry entry)); 
    MOCK_METHOD1(lookUp, int(const std::string text)); 
}; 

TEST(Lexer, N) { 
    MockSymbolTable symbolTable; 
    symbolTable.insert(Entry("dsgft", 3)); 
    EXPECT_CALL(symbolTable, insert(::testing::_)).Times(1); 
} 
+1

無關,您應該通過const引用('const&')傳遞參數而不是const值 – 2014-11-05 20:52:36

回答

3

你有如下

TEST(Lexer, N) { 
    MockSymbolTable symbolTable; 
    EXPECT_CALL(symbolTable, insert(::testing::_)).Times(1); 

    symbolTable.insert(Entry("dsgft", 3)); 
} 

所有通話的期望必須設置模擬對象被觸摸之前重寫測試用例第一。

+0

您修改了我的問題標題。我認爲測試應該通過,這是我的問題。我不想隱藏這個警告。 – 2014-11-05 20:57:36

+0

@EmilJasiński對不起。你的問題對我來說有點不清楚。我發現你的問題是/是。編輯我的答案。 – 2014-11-05 21:04:08