gtest使用 (二)

2014-11-24 03:12:45 · 作者: · 浏览: 2
//可以利用构造、析构来初始化一些参数
FooTest() {}
virtual ~FooTest() {}

//如果构造、析构还不能满足你,还有下面两个虚拟函数
virtual void SetUp() {
// 在构造后调用
strExe.resize(MAX_PATH);
GetModuleFileName(NULL, &strExe[0], MAX_PATH);
}

virtual void TearDown() { } // 在析构前调用
};

tstring getfilename(const tstring &full) //偶写的从完整路径里取出文件名的函数(路径分隔符假定为'\\')
{
return full.substr(full.rfind(_T('\\')));
}

tstring getpath(const tstring &full) //偶写的从完整路径里取出路径名的函数(Windows路径)
{
return full.substr(0, full.rfind(_T('\\')));
}

TEST_F(FooTest, Test_GFN) //测试getfilename函数
{
EXPECT_STREQ(_T("Projectexe"), getfilename(strExe).c_str());
}

TEST_F(FooTest, Test_GP) //测试getpath函数
{
EXPECT_STREQ(_T("D:\\Code\\libs\\google\\gtest-1\\BCC_SPC\\bcc\\ex"), getpath(strExe).c_str());
}

int main(int argc, TCHAR* argv[]) //主函数还是一样地
{
testing::InitGoogleTest(&argc,argv);
RUN_ALL_TESTS();
std::cin.get();
return 0;
}

//用TEST_F做同配置的系列测试
typedef std::basic_string tstring;
struct FooTest : testing::Test {
//这里定义要测试的东东
tstring strExe;
//可以利用构造、析构来初始化一些参数
FooTest() {}
virtual ~FooTest() {}

//如果构造、析构还不能满足你,还有下面两个虚拟函数
virtual void SetUp() {
// 在构造后调用
strExe.resize(MAX_PATH);
GetModuleFileName(NULL, &strExe[0], MAX_PATH);
}

virtual void TearDown() { } // 在析构前调用
};

tstring getfilename(const tstring &full) //偶写的从完整路径里取出文件名的函数(路径分隔符假定为'\\')
{
return full.substr(full.rfind(_T('\\')));
}

tstring getpath(const tstring &full) //偶写的从完整路径里取出路径名的函数(Windows路径)
{
return full.substr(0, full.rfind(_T('\\')));
}

TEST_F(FooTest, Test_GFN) //测试getfilename函数
{
EXPECT_STREQ(_T("Projectexe"), getfilename(strExe).c_str());
}

TEST_F(FooTest, Test_GP) //测试getpath函数
{
EXPECT_STREQ(_T("D:\\Code\\libs\\google\\gtest-1\\BCC_SPC\\bcc\\ex"), getpath(strExe).c_str());
}

int main(int argc, TCHAR* argv[]) //主函数还是一样地
{
testing::InitGoogleTest(&argc,argv);
RUN_ALL_TESTS();
std::cin.get();
return 0;
}
快速入门:
Google提供了两种断言形式,一种以ASSERT_开头,另一种以EXPECT_开头,它们的区别是ASSERT_*一旦失败立马退出,而EXPECT_还能继续下去。

断言列表:

真假条件测试:


致命断言 非致命断言 验证条件
ASSERT_TRUE(condition ); EXPECT_TRUE(condition ); condition 为真
ASSERT_FALSE(condition ); EXPECT_FALSE(condition ); condition 为假

数据对比测试:


致命断言 非致命断言 验证条件
ASSERT_EQ(期望值 , 实际值 ); EXPECT_EQ(期望值 , 实际值 ); 期望值 == 实际值
ASSERT_NE(val1 , val2 ); EXPECT_NE(val1 , val2 ); val1 != val2
ASSERT_LT(val1 , val2 ); EXPECT_LT(val1 , val2 ); val1 < val2
ASSERT_LE(val1 , val2 ); EXPECT_LE(val1 , val2 ); val1 <= val2
ASSERT_GT(val1 , val2 ); EXPECT_GT(val1 , val2 ); val1 > val2
ASSERT_GE(val1 , val2 ); EXPECT_GE(val1 , val2 ); val1 >= val2

字符串(针对C形式的字符串,即char*或wchar_t*)对比测试:


致命断言 非致命断言 验证条件
ASSERT_STREQ(expected_str , actual_str ); EXPECT_STREQ(expected_str , actual_str ); 两个C字符串有相同的内容
ASSERT_STRNE(str1 , str2 ); EXPECT_STRNE(str1 , str2 ); 两个C字符串有不同的内容
ASSERT_STRCASEEQ(expected_str , actual_str ); EXPECT_STRCASEEQ(expected_str , actual_str ); 两个C字符串有相同的内容,忽略大小写
ASSERT_STRCASENE(str1 , str2 ); EXPECT_STRCASENE(str1 , str2 ); 两个C字符串有不同的内容,忽略大小写


TEST宏:

TEST宏的作用是创建一个简单测试,它定义了一个测试函数,在这个函数里可以使用任何C++代码并使用上面提供的断言来进行检查。

TEST的第一个 参数是测试用例名,第二个 参数是测试用例中某项测试的名称。一个测试用例可以包含任意数量的独立测试。这两个参数组成