#include "ClientComm.h" #include "gmock/gmock.h" #include "gtest/gtest.h" using testing::_; using testing::A; using testing::An; using testing::AnyNumber; using testing::Const; using testing::DoDefault; using testing::Eq; using testing::Lt; using testing::MockFunction; using testing::Ref; using testing::Return; using testing::ReturnRef; using testing::TypedEq; class CClientCommMock : public CClientComm { public: CClientCommMock(CSecureClientBase* pCallback = nullptr):CClientComm(pCallback){} virtual ~CClientCommMock(){} MOCK_METHOD0(IsConnectionOK, bool()); MOCK_METHOD0(IsSecureConnection, bool()); MOCK_METHOD3(Connect, bool(const char* pServerAddr, int nPort, int nOption)); MOCK_METHOD0(Close, void()); MOCK_METHOD1(SendPackage, string(const CSmartPointer& pSendPkg)); MOCK_METHOD1(ReceivePackage, CSmartPointer(int nWaitSecond)); MOCK_METHOD1(CreateNewPackage, CSmartPointer(const char* pServiceCode)); MOCK_METHOD1(CreateReplyPackage, CSmartPointer(const CSmartPointer& pRecvPkg)); }; class CMockSecureClient : public CSecureClientBase { public: MOCK_METHOD0(GetFunction, CSmartPointer()); MOCK_METHOD0(OnAuthPass, void()); //MOCK_METHOD0(DecRefCount, void()); MOCK_METHOD1(OnReceivePackage, void(CSmartPointer& pRecvPkg)); MOCK_METHOD0(OnClose, void()); MOCK_METHOD3(OnError, void(DWORD dwSysCode, DWORD dwUserCode, const char* pErrMsg)); }; TEST(ClientCommTest, TestConnectionAction) { //treat as callback in CClientComm CMockSecureClient* secure_client_mock = new CMockSecureClient(); EXPECT_CALL(*secure_client_mock, GetFunction()); CClientCommMock* mock = new CClientCommMock(secure_client_mock); EXPECT_CALL(*mock, IsConnectionOK()).WillOnce(Return(true)); EXPECT_CALL(*mock, IsSecureConnection()).WillOnce(Return(true)); EXPECT_TRUE(mock->IsConnectionOK()); EXPECT_TRUE(mock->IsSecureConnection()); // replace default assigned m_pClientComm with mock object. ON_CALL(*secure_client_mock, GetFunction()).WillByDefault(Return(mock)); ASSERT_NE(nullptr, secure_client_mock->m_pClientComm); delete secure_client_mock->m_pClientComm; secure_client_mock->m_pClientComm = mock; EXPECT_TRUE(secure_client_mock->GetFunction() == CSmartPointer(mock)); EXPECT_TRUE(secure_client_mock->m_nRefCount == 1); secure_client_mock->DecRefCount(); } #ifdef GTEST_LINKED_AS_SHARED_LIBRARY int main(int argc, char** argv) { printf("Running main() from %s\n", __FILE__); testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } #endif // GTEST_LINKED_AS_SHARED_LIBRARY