读书人

求gtest例子解决思路

发布时间: 2012-04-11 17:42:33 作者: rapoo

求gtest例子
写出的代码一大堆BUG,使用VS2005 C++ ,听说gtest可能帮助减少bug和理解代码,想请大家给几个带基类的例子,学习和参考了,特别是一个类调用另一个类的情况下。

[解决办法]
安装(Windows + Visual Studio 2008)
1)解压到 D:\Program\gtest-1.4.0 目录下
2)打开D:\Program\gtest-1.4.0\msvc\gtest.sln,build gtest工程的Debug版本和Release版本。
3)新—:\Program\gtest-1.4.0\msvc\lib 目录,将D:\Program\gtest-1.4.0\msvc\gtest\Debug\gtestd.lib和D:\Program\gtest-1.4.0\msvc\gtest\Release\gtest.lib复制至该目录
4)设置VS:Tools (工具)-Options (选项)-Project and Solutions (项目)-VC++ Directories (VC++ 目录)
Show directories for (显示以下内容的目录): Include Files (包含文件) 增加 D:\Program\gtest-1.4.0\include
Show directories for (显示以下内容的目录): Library Files (库文件) 增加 D:\Program\gtest-1.4.0\msvc\lib
新建一控制台工程,加入test.cpp,Debug设置为Multi-threaded Debug (/MTd),Release设置为Multi-threaded (/MT)。即可编译、运行。运行后如图所示:

断言
1. ASSERT_* 系列的断言,当检查点失败时,退出当前函数。
2. EXPECT_* 系列的断言,当检查点失败时,继续往下执行。
常用断言示例:
ASSERT_TRUE(5 > 1);
ASSERT_FALSE(strlen(“abc”) != 3);
ASSERT_EQ(100, 5*20);
std::string str; ASSERT_THROW(str.substr(1), std::out_of_range);
std::string str; ASSERT_ANY_THROW(str.substr(1));
ASSERT_FLOAT_EQ(1.34f, 1.34f);
ASSERT_DOUBLE_EQ(1.73834, 1.73834);
ASSERT_NEAR(100, 101.5, 2)
事件机制
gtest提供了多种事件机制,以便在案例执行之前准备测试数据和测试之后释放相关资源。gtest的事件一共有3种:
全局的,所有案例执行前后(继承testing::Environment类,实现里面的SetUp和TearDown方法 )
TestSuite级别的,在某一批案例中第一个案例前,最后一个案例执行后(继承testing::Test类,实现里面的SetUpTestCase和TearDownTestCase静态方法 )
TestCase级别的,每个TestCase前后(继承testing::Test类,实现里面的SetUp和TearDown方法 )
后两种事件较为常用,下面一个例子演示其效果。

事件机制实例

C/C++ code
class FooTest : public testing::Test{public:    static void SetUpTestCase(){ cout << "SetUpTestCase" << endl;}    static void TearDownTestCase(){ cout << "TearDownTestCase" << endl;}    virtual void SetUp(){ cout << "SetUp" << endl;}    virtual void TearDown(){ cout << "TearDown" << endl;}   };TEST_F(FooTest, Test0){ cout << "Test0" << endl;}TEST_F(FooTest, Test1){ cout << "Test1" << endl;} 

读书人网 >C++

热点推荐