如何用googletest写C++单元测试

发表于:2013-8-27 11:01

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:scut1135    来源:51Testing软件测试网采编

  如果我们需要输出到XML文件,则执行./unittest --gtest_output=xml,那么会在当前目录下生成test_detail.xml 文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<testsuites tests="3" failures="0" disabled="0" errors="0" time="0.001" name="AllTests">
  <testsuite name="CHashTableTest" tests="3" failures="0" disabled="0" errors="0" time="0.001">
    <testcase name="hashfunc" status="run" time="0.001" classname="CHashTableTest" />
    <testcase name="addget" status="run" time="0" classname="CHashTableTest" />
    <testcase name="delget" status="run" time="0" classname="CHashTableTest" />
  </testsuite>
</testsuites>

  如此,一个简单的单元测试写完。因为太简单,所以不需要使用google mock模拟一些依赖。后续我再写结合google mock来写一些复杂的gtest单元测试。

  下面来简单说下gtest的工作流程。

  4、google test内部是如何执行我们的单元测试用例的

  首先从main函数看起。

  我们的main函数执行了RUN_ALL_TESTS宏,这个宏干了些什么事呢?

#define RUN_ALL_TESTS()\
  (::testing::UnitTest::GetInstance()->Run())

}  // namespace testing

  原来是调用了UnitTest静态工厂实例的Run方法!在gtest里,一切测试用例都是Test类的实例!所以,Run方法将会执行所有的Test实例来运行所有的单元测试,看看类图:

  为什么说一切单元测试用例都是Test类的实例呢?

  我们有两种写测试用例的方法,一种就是上面我说的TEST_F宏,这要求我们要显示的定义一个子类继承自Test类。在TEST_F宏里,会再次定义一个新类,继承自我们上面定义的子类(两重继承哈)。

  第二种就是TEST宏,这个宏里不要求用户代码定义类,但在google test里,TEST宏还是定义了一个子类继承自Test类。

  所以,UnitTest的Run方法只需要执行所有Test实例即可。

54/5<12345>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号