gtest和gmock入門實例
對于 c++ 來說寫單元測試和 mock 框架不是一件容易的事情。還好, Google 為我們搭建了一個出色的單元測試和 mock 框架。網上的例子很多都過多強調概念,本文用一個簡單的例子讓大家對于什么是 gtest 和 gmock 讓大家有一個直觀的了解,讓大家很快上手,就像寫 hello word 一樣容易。
gtest&gmock 的 1.6 版本的使用 make 編譯,新版的已經已經遷移到 github 上使用 cmake 編譯,安裝過程很多,這里不在重復,如果大家有需要再單獨寫。
1.下載安裝 Google Test and Google Mock
2. 編譯生成靜態庫gtest_main.a gmock_main.a (包含main庫后不需要自己寫main函數)
gmock用來對與為實現對象的接口模擬。
我們有一個Messgener.h接口,它的getMessage目前還沒有實現,可以使用mock類提供的宏來模擬,這樣就可以調試客戶端程序,屏蔽Messgener.h的具體實現
#ifndef SRC_MESSENGER_H_
#define SRC_MESSENGER_H_
#include <string>
using namespace std;
class Messenger
{
public:
virtual ~Messenger() {}
virtual string getMessage() = 0;
};
#endif /* SRC_MESSENGER_H_ */ Messenger.h 的 mock 類
#ifndef SRC_MOCKMESSENGER_H_
#define SRC_MOCKMESSENGER_H_
#include "Messenger.h"
#include <string>
#include <gmock/gmock.h>
using namespace std;
class MockMessenger : public Messenger
{
public:
MOCK_METHOD0(getMessage, string());
};
#endif /* SRC_MOCKMESSENGER_H_ */ 調用Messenger.h的客戶端程序
HelloWorld.h
#ifndef SRC_HELLOWORLD_H_
#define SRC_HELLOWORLD_H_
#include <string>
#include "Messenger.h"
using namespace std;
class HelloWorld
{
public:
HelloWorld();
virtual ~HelloWorld();
string getMessage(Messenger* messenger) const;
};
#endif /* SRC_HELLOWORLD_H_ */ HelloWorld.cpp
#include "HelloWorld.h"
#include "Messenger.h"
HelloWorld::HelloWorld()
{
}
HelloWorld::~HelloWorld()
{
}
string HelloWorld::getMessage(Messenger* messenger) const
{
return messenger->getMessage();
} 有了要測試的代碼和依賴的接口的mock模擬類,下面是gtest的單元測試寫法:
#include "HelloWorld.h"
#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include "MockMessenger.h"
#include <string>
#include <memory>
using namespace testing;
TEST(HelloWorldTest, getMessage)
{
MockMessenger messenger;
std::string msg = "Hello World";
EXPECT_CALL(messenger, getMessage()).WillRepeatedly(Return(ByRef(msg)));
HelloWorld helloWorld;
EXPECT_EQ("Hello World", helloWorld.getMessage(&messenger));
EXPECT_EQ("Hello World", helloWorld.getMessage(&messenger));
EXPECT_EQ("Hello World", helloWorld.getMessage(&messenger));
} 單元測試結果
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!