ubuntu下 google gmock使用

来源:互联网 发布:淘宝助理ipad版 编辑:程序博客网 时间:2024/05/01 11:34

资源github和网上,但是发现大部分都直接给出样例和运行图,windows下不给环境配置,linux下的不给makefile(或者不单独拎出来),太坑。
下文是ubuntu14.04 32bit + gmock1.8.0实践,给出了完整代码(包括Makefile)和截图,如有错误,望指出.


环境配置

直接github下载最新版
https://github.com/google/googletest/tree/release-1.8.0


ubuntu下解压后

$ ./travis.sh$ cmake ./CMakeLists.txt$ make$ sudo make install

安装成功后(.h .lib)

john@ubuntu:/usr/local/include$ lsgmock  gtest  lauxlib.h  luaconf.h  lua.h  lua.hpp  luajit-2.1  lualib.hjohn@ubuntu:/usr/local/include$ 
john@ubuntu:/usr/local/lib$ lslibgmock.a       liblua.a            libluajit-5.1.so.2.1.0  pkgconfiglibgmock_main.a  libluajit-5.1.a     lua                     python2.7libgtest.a       libluajit-5.1.so    luarocks                python3.4libgtest_main.a  libluajit-5.1.so.2  node_modulesjohn@ubuntu:/usr/local/lib$ 

gtest使用还可以参考我的博文,博文后面有github学习笔记地址
http://blog.csdn.net/qq_26437925/article/details/56479841


gmock实践

下面是ubuntu 14.04 32bit, gmock测试 共6个文件
参考
http://blog.csdn.net/gubenpeiyuan/article/details/50678697

这里写图片描述

  • Messgener.h(未实现的接口)
#ifndef SRC_MESSENGER_H_#define SRC_MESSENGER_H_#include <string>using namespace std;class Messenger{public:    virtual ~Messenger() {}    virtual string getMessage() = 0;    virtual int add(int a, int b) = 0;};#endif /* SRC_MESSENGER_H_ */
  • HelloWorld.h (调用了Messgener类)
#ifndef SRC_HELLOWORLD_H_#define SRC_HELLOWORLD_H_#include <string>#include "Messgener.h"using namespace std;class HelloWorld{public:    HelloWorld();    virtual ~HelloWorld();    string getMessage(Messenger* messenger) const;    int hello_add(Messenger* messenger, int a, int b) const;};#endif /* SRC_HELLOWORLD_H_ */
  • HelloWord.cpp
#include "HelloWorld.h"#include "Messgener.h"HelloWorld::HelloWorld(){}HelloWorld::~HelloWorld(){}string HelloWorld::getMessage(Messenger* messenger) const{    return messenger->getMessage();}int HelloWorld::hello_add(Messenger* messenger,int a, int b) const{    return messenger->add(a, b);}
  • MockMessgener.h 写未实现的Mock类
#ifndef SRC_MOCKMESSENGER_H_#define SRC_MOCKMESSENGER_H_#include "Messgener.h"#include <string>#include <gmock/gmock.h>using namespace std;class MockMessenger : public Messenger{public:    MOCK_METHOD0(getMessage, string());    MOCK_METHOD2(add, int(int, int));};#endif /* SRC_MOCKMESSENGER_H_ */
  • main.cpp 测试
#include "HelloWorld.h"#include <gtest/gtest.h>#include <gmock/gmock.h>#include "MockMessgener.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));}TEST(HelloWorldTest, add){    MockMessenger messenger;    int a = 3;    int b = 11;    EXPECT_CALL(messenger, add(a, b)).WillRepeatedly(Return(a+b));    HelloWorld helloWorld;    EXPECT_EQ(14, helloWorld.hello_add(&messenger, a, b));}
  • Makefile
.PHONY: all cleanCC=g++OBJ_DIR=./objHEADERS=-I.DEBUG=-g -ggdbWALL=-Wall -WCFLAGS=$(WALL) $(DEBUG)L_CC=$(CC) $(CFLAGS) $(HEADERS)C_SRC=${wildcard *.cpp}C_OBJ=$(patsubst %.cpp, $(OBJ_DIR)/%.o, $(C_SRC)) #目标文件C_EXE=a.outall:prepare $(C_EXE)prepare:    @if [ ! -d $(OBJ_DIR)  ];then mkdir $(OBJ_DIR); fi$(C_EXE):$(C_OBJ)    $(L_CC) $^ -o $@ -lgtest -lgtest_main -lgmock -lgmock_main -lpthread$(OBJ_DIR)/%.o:%.cpp    $(L_CC) -c $< -o $@clean:    @-rm -f $(C_EXE)    @-rm -rf $(OBJ_DIR)

运行截图

这里写图片描述


gmock学习参考
http://blog.csdn.net/jfkidear/article/details/17565669

0 0