我试图模仿Cdatabase方法"Open“。贝娄是我做模拟类配置的文件。
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方法吗?
发布于 2015-10-27 11:45:10
您应该得到uninteresting function calls在mock_my_CDatabase::Open上的警告消息。检查测试输出。
尝试对模拟的函数参数使用串匹配器。您正在尝试将第一个参数与指向文字的指针相匹配,这将永远不会匹配。
https://stackoverflow.com/questions/33366469
复制相似问题