没有合适的资源?快使用搜索试试~ 我知道了~
首页轻松编写 C++ 单元测试(gtest)
资源详情
资源评论
资源推荐

2014/10/30
轻松编写 C++ 单元测试
https://www.ibm.com/developerworks/cn/linux/l-cn-cppunittest/ 1/10
单元测试概述
测试并不只是测试工程师的责任,对于开发工程师,为了保证发布给测试环节的代码具有足够好
的质量(Quality),为所编写的功能代码编写适量的单元测试是十分必要的。
单元测试(UnitTest,模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小
的、很明确的功能是否正确,通过编写单元测试可以在编码阶段发现程序编码错误,甚至是程序
设计错误。
单元测试不但可以增加开发者对于所完成代码的自信,同时,好的单元测试用例往往可以在回归
测试的过程中,很好地保证之前所发生的修改没有破坏已有的程序逻辑。因此,单元测试不但不
会成为开发者的负担,反而可以在保证开发质量的情况下,加速迭代开发的过程。
对于单元测试框架,目前最为大家所熟知的是JUnit及其针对各语言的衍生产品,C++语言所
对应的JUnit系单元测试框架就是CppUnit。但是由于CppUnit的设计严格继承自JUnit,而没
有充分考虑C++与Java固有的差异(主要是由于C++没有反射机制,而这是JUnit设计的基
础),在C++中使用CppUnit进行单元测试显得十分繁琐,这一定程度上制约了CppUnit的普
及。笔者在这里要跟大家介绍的是一套由google发布的开源单元测试框架(Testing
Framework):googletest。
应用 googletest 编写单元测试代码
googletest是由Google公司发布,且遵循NewBSDLicense(可用作商业用途)的开源项
目,并且googletest可以支持绝大多数大家所熟知的平台。与CppUnit不同的是:googletest
可以自动记录下所有定义好的测试,不需要用户通过列举来指明哪些测试需要运行。
定义单元测试
在应用googletest编写单元测试时,使用TEST()宏来声明测试函数。如:
清单1.用TEST()宏声明测试函数
TEST(GlobalConfigurationTest, configurationDataTest)
TEST(GlobalConfigurationTest, noConfigureFileTest)
分别针对同一程序单元GlobalConfiguration声明了两个不同的测试(Test)函数,以分别对配
置数据进行检查(configurationDataTest),以及测试没有配置文件的特殊情况(
noConfigureFileTest)。
实现单元测试
针对同一程序单元设计出不同的测试场景后(即划分出不同的Test后),开发者就可以编写单
元测试分别实现这些测试场景了。
在googletest中实现单元测试,可通过ASSERT_*和EXPECT_*断言来对程序运行结果进行检
查。ASSERT_*版本的断言失败时会产生致命失败,并结束当前函数;EXPECT_*版本的断言
失败时产生非致命失败,但不会中止当前函数。因此,ASSERT_*常常被用于后续测试逻辑强
制依赖的处理结果的断言,如创建对象后检查指针是否为空,若为空,则后续对象方法调用会失
败;而EXPECT_*则用于即使失败也不会影响后续测试逻辑的处理结果的断言,如某个方法返
回页首

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论1