Xcode下使用gtest
编译gest
- 下载gest代码
- 进到目录:googletest-master/googletest/xcode,打开工程:gtest.xcodeproj,
- 修改C++ Standard Library为C++11,否则将gtest集成到C++11的工程时,会有编译错误,
- 修改OS X Deployment Target为10.7及以上(C++11要求)
-
修改Architectures为通用,
修改后按Command+B编译代码,如图:
配置Architectures
配置OS X Deployment Target
配置C++ Standard Library
-
通过以下方式找到生成的库文件,拷贝到需要的地方。
查找库文件
配置gest库环境
-
将gtest的头文件和生成的库文件分别拷贝到工程的include和lib目录下
gtest库相关文件 -
在search paths->Library Search Paths中增加gtest库目录
配置gtest库的路径 -
在Other Linker Flags中链接gtest库
链接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
配置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));
}
网友评论