2015-10-27 41 views
2

我想模擬Cdatabase方法「打開」。波紋管是我做模擬類配置的文件。不能模擬CDatabase打開/ OpenEx使用谷歌模擬C + +

AFXDB.H

... 
    virtual BOOL Open(LPCTSTR lpszDSN, BOOL bExclusive = FALSE, 
      BOOL bReadonly = FALSE, LPCTSTR lpszConnect = _T("ODBC;"), 
      BOOL bUseCursorLib = TRUE); 
... 

mock_myCDatabase.h

...<linkers> 

class mock_my_CDatabase :public CDatabase 
{ 
public: 
    mock_my_CDatabase() 
    {} 
    ~mock_my_CDatabase() 
    {} 
    MOCK_METHOD5(Open, BOOL(LPCTSTR lpszDSN, BOOL bExclusive,BOOL bReadonly, LPCTSTR lpszConnect,BOOL bUseCursorLib)); 
}; 

DemoClassB.cpp

...<linkers> 
    ... 
    CDemoClassB::CDemoClassB(CDatabase &p_db) 
    { 
     m_db = &p_db; 
    } 
    ... 
    ... 
    BOOL CDemoClassB::fun2() 
    { 
     m_db->Open((LPCTSTR)NULL, FALSE, FALSE, (LPCTSTR)"ODBC;DRIVER={MICROSOFT ACCESS DRIVER (*.mdb, *.accdb)};DSN='';DBQ=C:\\Karthik\\GMockDemo\\GMockDemo\\RepolyticsDB.accdb", CDatabase::noOdbcDialog); 
      return TRUE; 
    } 

GMockDemo.cpp

// GMockDemo.cpp : Defines the entry point for the console application. 
// 

...<linkers> 

using namespace testing; 
using ::testing::Return; 


TEST(mock, mockCDatabase) 
{ 
    mock_my_CDatabase mockDb; 

    EXPECT_CALL(mockDb, Open((LPCTSTR)"ODBC;DRIVER={MICROSOFT ACCESS DRIVER (*.mdb, *.accdb)};DSN='';DBQ=C:\\Karthik\\GMockDemo\\GMockDemo\\RepolyticsDB.accdb", CDatabase::noOdbcDialog)).Times(8).WillRepeatedly(Return(TRUE)); 
    CDemoClassB m_Bt(mockDb); 
    ASSERT_EQ(m_Bt.fun2(), TRUE); 
} 
... 
... 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
    ::testing::InitGoogleMock(&argc, argv); 
    RUN_ALL_TESTS(); 
    std::getchar(); // keep console window open until Return keystroke 
    return 0; 
} 

我無法模擬CDatabase方法:打開。當我運行的代碼,我得到

預計:到被調用一次 實際:從不叫 - 不滿意,積極

任何人都可以請幫我在嘲笑一個的CDatabase方法

+0

我無法找出我錯在哪裏。對不起,長碼。我是C++和谷歌模擬器的新手。謝謝你的時間。 – mwKART

回答

1

你應該得到uninteresting function calls的警告消息mock_my_CDatabase::Open。檢查測試輸出。

嘗試使用string matcher作爲模擬函數參數。您試圖將第一個參數與指向文字的指針進行匹配,該指針永遠不會匹配。

+0

對不起。它複製過去的錯誤。我正在測試OpenEx – mwKART

+0

我解決了問題。你的第二點是我面臨的問題的主要原因。 (1).WillOnce(Return(TRUE));使用「測試:: _」 EXPECT_CALL(mock_Db,OpenEx(_,CDatabase :: noOdbcDialog))。 其工作表示感謝。 – mwKART

+0

@mwKART:很高興幫助。請編輯你的問題並修改'Open/OpenEx'錯誤。這不是論壇,你可以在發佈後實際編輯問題(和答案)。 –