### gtest测试笔记 #### 环境搭建与配置 在进行`gtest`的环境搭建时,首先需要下载`gtest`源码包,比如这里提到的`gtest-1.7.0.zip`。接着,按照以下步骤进行配置: 1. **解压文件**:将下载的`gtest-1.7.0.zip`解压到指定目录,如`gtest-1.7.0`。 2. **创建工作目录**:执行`mkdir gtest`命令来创建一个名为`gtest`的工作目录。 3. **进入工作目录**:使用`cd gtest`命令进入新创建的目录。 4. **配置CMake**:运行`cmake ../gtest-1.7.0`来配置CMake,这里指定了`gtest-1.7.0`作为源码路径。 5. **编译**:通过`make`命令进行编译。 6. **生成库文件**:完成编译后,会得到两个库文件`libgtest.a`和`libgtest_main.a`。 #### 测试程序编写 接下来是关于如何使用`gtest`进行测试程序的编写。 1. **基本测试程序**:无需继承自`testing::Test`即可编写测试用例。例如,创建一个简单的类`t`,其中包含设置和获取私有成员变量的方法。 ```cpp class t { public: t() {}; void setX(int x) {_x = x;}; int getX() {return _x;}; private: int _x; }; ``` 2. **编写测试用例**:使用`TEST`宏定义测试用例。例如,可以定义两个测试用例来验证`setX`和`getX`方法的正确性。 ```cpp TEST(t, getX) { t tt; tt.setX(5); EXPECT_EQ(tt.getX(), 5); } TEST(t, setX) { t tt; tt.setX(0); EXPECT_EQ(tt.getX(), 0); } ``` 3. **使用`TEST_F`编写测试**:如果需要使用`TEST_F`宏,必须继承自`testing::Test`类,并在测试类中声明或实现公共成员函数。下面的例子展示了如何正确地使用`TEST_F`宏。 ```cpp class t : public testing::Test { public: t() {}; void setX(int x) {_x = x;}; int getX() {return _x;}; protected: int _x; }; TEST_F(t, getX) { _x = 5; EXPECT_EQ(_x, 5); } ``` #### 常见错误与解决方法 1. **非继承类的直接使用成员变量问题**:当测试类没有继承自`testing::Test`时,不能直接访问被测试类的私有成员变量。这会导致编译错误,如`'x' was not declared in this scope`。解决办法是在测试用例中创建对象并通过公共接口进行交互。 ```cpp TEST(t, getX) { t tt; tt.setX(5); EXPECT_EQ(tt.getX(), 5); } ``` 2. **错误地使用`TEST_F`**:如果测试类没有正确地继承`testing::Test`类,也会导致编译错误。例如,尝试使用`TEST_F(tt, getX)`而`tt`并未继承自`testing::Test`。 ```cpp class tt { public: tt() {}; void setX(int x) {_x = x;}; int getX() {return _x;}; protected: int _x; }; TEST_F(tt, getX) { // 错误! _x = 5; EXPECT_EQ(_x, 5); } ``` 正确的方式是让`tt`继承自`testing::Test`。 ```cpp class tt : public testing::Test { public: tt() {}; void setX(int x) {_x = x;}; int getX() {return _x;}; protected: int _x; }; TEST_F(tt, getX) { _x = 5; EXPECT_EQ(_x, 5); } ``` 通过以上内容,我们了解了如何搭建`gtest`环境、编写基本的测试用例以及如何处理常见的错误。这些知识点对于初学者来说非常重要,有助于更深入地理解`gtest`框架的使用方式。
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助