Xcode下使用gtest和gmock

Xcode下使用gtest

编译gest

  • 下载gest代码
  • 进到目录:googletest-master/googletest/xcode,打开工程:gtest.xcodeproj,
  1. 修改C++ Standard Library为C++11,否则将gtest集成到C++11的工程时,会有编译错误,
  2. 修改OS X Deployment Target为10.7及以上(C++11要求)
  3. 修改Architectures为通用,
    修改后按Command+B编译代码,如图:


    Xcode下使用gtest和gmock_第1张图片
    配置Architectures

    Xcode下使用gtest和gmock_第2张图片
    配置OS X Deployment Target

    Xcode下使用gtest和gmock_第3张图片
    配置C++ Standard Library
  • 通过以下方式找到生成的库文件,拷贝到需要的地方。


    Xcode下使用gtest和gmock_第4张图片
    查找库文件

配置gest库环境

  • 将gtest的头文件和生成的库文件分别拷贝到工程的include和lib目录下


    Xcode下使用gtest和gmock_第5张图片
    gtest库相关文件
  • 在search paths->Library Search Paths中增加gtest库目录


    Xcode下使用gtest和gmock_第6张图片
    配置gtest库的路径
  • 在Other Linker Flags中链接gtest库


    Xcode下使用gtest和gmock_第7张图片
    链接gtest库

Xcode下使用mock

编译mock

  • 进到目录:cd googletest-master/googlemock/make
  • 编译:make,编译完只有库:gmock_main.a,该库中包含了gmock的框架,同时,也包含了gtest框架,可以认为gtest是gmock的一个子集。在gmock_main.a中默认编译了一个main函数,该main函数会初始化gmock和gtest,并且执行所有的TEST或TEST_F宏定义的测试用例,所以使用gmock_main.a进行单元测试时,不能编写main函数,否则会出现多个main冲突。
  • 生成非main库:make gmock.a,生成不带main函数的库,此时就可以编写自己的main函数
  • 运行单元测试:./gmock_test
Xcode下使用gtest和gmock_第8张图片
编译gmock

配置gmock环境

同gtest

编写gtest和gmock测试用例

class Messenger {
public:
  virtual ~Messenger() {}
  virtual std::string getMessage() = 0;
};

class MockMessenger : public Messenger {
public:
  MOCK_METHOD0(getMessage, std::string());
};

class HelloWorld {

public:
  std::string getMessage(Messenger *messenger) {
    return messenger->getMessage();
  }
};

TEST(ss, getMessage) {
  MockMessenger messenger;
  std::string msg = "Hello World";
  EXPECT_CALL(messenger, getMessage())
      .WillRepeatedly(testing::Return(testing::ByRef(msg)));
    HelloWorld helloWorld;
    EXPECT_EQ(msg, helloWorld.getMessage(&messenger));
    EXPECT_EQ("Hello World1", helloWorld.getMessage(&messenger));
}

相关资料:
gmock官方网站
gmock的正则表达式
gmock官方wiki
gtest官方网站

你可能感兴趣的:(Xcode下使用gtest和gmock)