Google C++ Test Framework (一)通过ASSERT和EXPECT宏完成的测试
2009-01-06 14:31
459 查看
Google C++ Test Framework(以下简称gtest)是Google提供的一套C++测试框架。其官方地址为 http://code.google.com/p/googletest/ 。
(一)通过ASSERT和EXPECT宏完成的测试
gtest用TEST宏来完成最基本的测试,其实用的方法如下:
TEST(CASE_NAME, TEST_NAME){
...//ASSERTs or EXPECTs
}
CASE_NAME
为测试用例名,TEST_NAME为测试名,这些都是由测试人员给的。在TEST宏中可以加入若干ASSERT类型的宏或者EXPECT类型的宏。如果
ASSERT类型的宏的检查没有通过,那么将中断这一测试,不再继续执行此测试中后面的内容;如果EXPECT类型的宏的检查没有通过,难么将向控制台输
出这一信息,但是不影响用例中后面的宏的继续执行。在程序中,可以通过调用RUN_ALL_TESTS()来执行全部的用例。
可以通过下面的例子来说明gtest的简单使用方法:
#include <gtest/gtest.h>
int Sum(int a, int b){
return a+b;
}
TEST(TESTSum, TEST_ZERO){
EXPECT_EQ(0,Sum(0,0));
EXPECT_EQ(0,Sum(-1,1));
}
TEST(TESTSum, TEST_ASSERT_SUCCESS){
ASSERT_EQ(1,Sum(0,1));
ASSERT_EQ(1,Sum(1,0));
}
TEST(TESTSum, TEST_ASSERT_FAIL){
ASSERT_EQ(0, Sum(1,0));
EXPECT_EQ(2,Sum(1,0));
}
TEST(TESTSum, TEST_FAIL){
EXPECT_EQ(2,Sum(0,1));
EXPECT_EQ(-1,Sum(1,0));
}
int main(int argc, char* argv[]){
testing::InitGoogleTest(&argc,argv);
RUN_ALL_TESTS();
return 0;
}
这
一示例程序建立了4个针对Sum函数的测试,其中TEST_ZERO和TEST_ASSERT_SUCCESS都是可以通过的测试,分别采用了
EXPECT宏和ASSERT宏;而TEST_ASSERT_FAIL和TEST_FAIL则是不能通过的测试,而TEST_ASSERT_FAIL包含
了一个不能通过测试的ASSERT宏。在main函数中,通过testing::InitGoogleTest函数对gtest进行初始化,然后运行
RUN_ALL_TESTS进行全部的测试。程序的运行结果如下:
[==========] Running 4 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 4 tests from TESTSum
[ RUN ] TESTSum.TEST_ZERO
[ OK ] TESTSum.TEST_ZERO
[ RUN ] TESTSum.TEST_ASSERT_SUCCESS
[ OK ] TESTSum.TEST_ASSERT_SUCCESS
[ RUN ] TESTSum.TEST_ASSERT_FAIL
./main.cpp(19): error: Value of: Sum(1,0)
Actual: 1
Expected: 0
[ FAILED ] TESTSum.TEST_ASSERT_FAIL
[ RUN ] TESTSum.TEST_FAIL
./main.cpp(24): error: Value of: Sum(0,1)
Actual: 1
Expected: 2
./main.cpp(25): error: Value of: Sum(1,0)
Actual: 1
Expected: -1
[ FAILED ] TESTSum.TEST_FAIL
[----------] Global test environment tear-down
[==========] 4 tests from 1 test case ran.
[ PASSED ] 2 tests.
[ FAILED ] 2 tests, listed below:
[ FAILED ] TESTSum.TEST_ASSERT_FAIL
[ FAILED ] TESTSum.TEST_FAIL
2 FAILED TESTS
我
们可以看到TESTSum.TEST_ZERO和TESTSum.TEST_ASSERT_SUCCESS都正常的通过了测试,在
TESTSum.TEST_FAIL中没有通过的两个测试也得到了对应的输出。而在用例TESTSum.TEST_ASSERT_FAIL中,我们也可以
看到在ASSERT没有通过,程序停止对该测试,跳过了剩下的一个EXPECT宏。RUN_ALL_TESTS有返回值,全部测试通过时会返回0。
ACCERT或者EXPECT类型的宏都包含以下几类:
1)Boolean类型,只需要传一个参数,即一个判断条件,包括ASSERT_TRUE,ASSERT_FALSE,EXPECT_TRUE,EXPECT_FALSE。
2)数值类,传入两个值,检查两个值是否符合调用宏的条件。ASSERT类型的宏包括
ASSERT_EQ,ASSERT_NE,ASSERT_LE,ASSERT_LE,ASSERT_GT,ASSERT_GE,对于每一种ASSERT类
型的宏,EXPECT类型的宏都有一个对应。
3)字符类,检查两个字符串相等或者不等,比较的字符串必须为c语言的字符串类型(char*或者wchar*)。ASSERT类型的宏包括
ASSERT_STREQ,ASSERT_STRNE,ASSERT_STRCASEEQ,ASSERT_STRCASENE(后两种为忽略大小写的检
查),对于每一种ASSERT类型的宏,EXPECT类型的宏都有一个对应。
(一)通过ASSERT和EXPECT宏完成的测试
gtest用TEST宏来完成最基本的测试,其实用的方法如下:
TEST(CASE_NAME, TEST_NAME){
...//ASSERTs or EXPECTs
}
CASE_NAME
为测试用例名,TEST_NAME为测试名,这些都是由测试人员给的。在TEST宏中可以加入若干ASSERT类型的宏或者EXPECT类型的宏。如果
ASSERT类型的宏的检查没有通过,那么将中断这一测试,不再继续执行此测试中后面的内容;如果EXPECT类型的宏的检查没有通过,难么将向控制台输
出这一信息,但是不影响用例中后面的宏的继续执行。在程序中,可以通过调用RUN_ALL_TESTS()来执行全部的用例。
可以通过下面的例子来说明gtest的简单使用方法:
#include <gtest/gtest.h>
int Sum(int a, int b){
return a+b;
}
TEST(TESTSum, TEST_ZERO){
EXPECT_EQ(0,Sum(0,0));
EXPECT_EQ(0,Sum(-1,1));
}
TEST(TESTSum, TEST_ASSERT_SUCCESS){
ASSERT_EQ(1,Sum(0,1));
ASSERT_EQ(1,Sum(1,0));
}
TEST(TESTSum, TEST_ASSERT_FAIL){
ASSERT_EQ(0, Sum(1,0));
EXPECT_EQ(2,Sum(1,0));
}
TEST(TESTSum, TEST_FAIL){
EXPECT_EQ(2,Sum(0,1));
EXPECT_EQ(-1,Sum(1,0));
}
int main(int argc, char* argv[]){
testing::InitGoogleTest(&argc,argv);
RUN_ALL_TESTS();
return 0;
}
这
一示例程序建立了4个针对Sum函数的测试,其中TEST_ZERO和TEST_ASSERT_SUCCESS都是可以通过的测试,分别采用了
EXPECT宏和ASSERT宏;而TEST_ASSERT_FAIL和TEST_FAIL则是不能通过的测试,而TEST_ASSERT_FAIL包含
了一个不能通过测试的ASSERT宏。在main函数中,通过testing::InitGoogleTest函数对gtest进行初始化,然后运行
RUN_ALL_TESTS进行全部的测试。程序的运行结果如下:
[==========] Running 4 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 4 tests from TESTSum
[ RUN ] TESTSum.TEST_ZERO
[ OK ] TESTSum.TEST_ZERO
[ RUN ] TESTSum.TEST_ASSERT_SUCCESS
[ OK ] TESTSum.TEST_ASSERT_SUCCESS
[ RUN ] TESTSum.TEST_ASSERT_FAIL
./main.cpp(19): error: Value of: Sum(1,0)
Actual: 1
Expected: 0
[ FAILED ] TESTSum.TEST_ASSERT_FAIL
[ RUN ] TESTSum.TEST_FAIL
./main.cpp(24): error: Value of: Sum(0,1)
Actual: 1
Expected: 2
./main.cpp(25): error: Value of: Sum(1,0)
Actual: 1
Expected: -1
[ FAILED ] TESTSum.TEST_FAIL
[----------] Global test environment tear-down
[==========] 4 tests from 1 test case ran.
[ PASSED ] 2 tests.
[ FAILED ] 2 tests, listed below:
[ FAILED ] TESTSum.TEST_ASSERT_FAIL
[ FAILED ] TESTSum.TEST_FAIL
2 FAILED TESTS
我
们可以看到TESTSum.TEST_ZERO和TESTSum.TEST_ASSERT_SUCCESS都正常的通过了测试,在
TESTSum.TEST_FAIL中没有通过的两个测试也得到了对应的输出。而在用例TESTSum.TEST_ASSERT_FAIL中,我们也可以
看到在ASSERT没有通过,程序停止对该测试,跳过了剩下的一个EXPECT宏。RUN_ALL_TESTS有返回值,全部测试通过时会返回0。
ACCERT或者EXPECT类型的宏都包含以下几类:
1)Boolean类型,只需要传一个参数,即一个判断条件,包括ASSERT_TRUE,ASSERT_FALSE,EXPECT_TRUE,EXPECT_FALSE。
2)数值类,传入两个值,检查两个值是否符合调用宏的条件。ASSERT类型的宏包括
ASSERT_EQ,ASSERT_NE,ASSERT_LE,ASSERT_LE,ASSERT_GT,ASSERT_GE,对于每一种ASSERT类
型的宏,EXPECT类型的宏都有一个对应。
3)字符类,检查两个字符串相等或者不等,比较的字符串必须为c语言的字符串类型(char*或者wchar*)。ASSERT类型的宏包括
ASSERT_STREQ,ASSERT_STRNE,ASSERT_STRCASEEQ,ASSERT_STRCASENE(后两种为忽略大小写的检
查),对于每一种ASSERT类型的宏,EXPECT类型的宏都有一个对应。
相关文章推荐
- Google C++ Test Framework (二)为用例中的测试进行统一的配置
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之五 - 死亡测试
- Google C++单元测试框架(Gtest)系列教程之三——测试固件(Test fixture)
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之五 - 死亡测试
- Google C++ Test Framework (Primer)
- GoogleTest测试C++代码
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之五 - 死亡测试
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之五 - 死亡测试
- 【转】玩转Google开源C++单元测试框架Google Test系列(gtest)之五 - 死亡测试
- 玩转 Google开源C++单元测试框架Google Test系列(gtest)之五 - 死亡测试(转载)
- 为什么使用googletest,而不是其他C++测试框架(译自google faq的该问题)
- eclipse 中用GoogleTest 测试C++程序
- Google C++单元测试框架(Gtest)系列教程之三——测试固件(Test fixture)
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之五 - 死亡测试
- googletest - Google C++ Testing Framework - Google Project Hosting
- Google C++单元测试框架(Gtest)系列教程之三——测试固件(Test fixture)
- something about Google Test(Google C++ Testing Framework)
- GoogleTest框架测试C++代码
- C++测试利器--google test开源测试框架
- (转)玩转Google开源C++单元测试框架Google Test系列(gtest)之五 - 死亡测试