zoukankan      html  css  js  c++  java
  • gtest代码库浅析

    代码库工程概述

    IDE:Visual Studio 2010

    sln路径:gtestmsvcgtest.sln

    用IDE打开上面的sln,可以看到以下四个工程,算不上复杂。展开之后更是感觉这几个工程出奇地简单。

    gtest工程

    • 工程类型:静态链接库
    • 要点:整个gtest代码库的文件数目较多,gtest采用了一种特殊的方式,把所有代码文件的引用都整合到了gtest-all.cc这一个文件里面,以下是代码片段: 
    // This line ensures that gtest.h can be compiled on its own, even
    // when it's fused.
    #include "gtest/gtest.h"
    
    // The following lines pull in the real gtest *.cc files.
    #include "src/gtest.cc"
    #include "src/gtest-death-test.cc"
    #include "src/gtest-filepath.cc"
    #include "src/gtest-port.cc"
    #include "src/gtest-printers.cc"
    #include "src/gtest-test-part.cc"
    #include "src/gtest-typed-test.cc"

    这种做法大大降低了引入gtest的操作成本。比如说要在一个工程中引入gtest,那我只需要显式地把gtest-all.cc加入到工程中,基本就达到目的了,这个过程我既不需要关心gtest里面各种文件是干什么的,也不需要关注哪些文件需要参与编译。详情可参考我写的另外一片文章《使用Visual Studio创建gtest工程》(链接:http://www.cnblogs.com/duxiuxing/p/4272343.html)。

    gtest_main工程

    • 工程类型:静态链接库
    • 要点:gtest_main.cc里面是一个完整的main()函数。如果连写main()函数这一步都能省掉的话,基于gtest来建立测试工程的操作成本应该说是降低到了某一种极致的程度。 以下是gtest_main.cc的代码:
    #include <stdio.h>
    
    #include "gtest/gtest.h"
    
    GTEST_API_ int main(int argc, char **argv) {
      printf("Running main() from gtest_main.cc
    ");
      testing::InitGoogleTest(&argc, argv);
      return RUN_ALL_TESTS();
    }

    gtest_prod_test

    • 工程类型:命令行程序
    • 要点:这个是一个测试工程,被测试代码是一个叫做PrivateCode的类,工程演示的是如何使用gtest的FRIEND_TEST宏,在测试代码里面访问PrivateCode的private成员。整个工程包含以下要点:
      1. 静态链接了gtest_main,所以连main()函数都不用写了;
      2. 在这个工程中,单元测试是直接面向代码的,而不是面向被测试代码所编译出来的模块,测试代码和被测试代码是放在一个同工程里面进行编译的。

    对于要点2,我们需要从以下两方面理解:

    1. 对于那些高内聚,低耦合的模块来说,这种思路则相当有重要。很多情况下,这类模块对外暴露的接口数量相当有限,如果仅针对这些接口来编写测试代码,效果不一定好,反倒是模块内部那些不曾对外暴露代码,更有被测试的价值。
    2. 如果被测试代码是地位如MFC这样的基础库,是不是这样做可能就关系不大了,因为对于一个基础库来说,绝大部分的代码往往在模块外也能访问得到。

    gtest_unittest

    • 工程类型:命令行程序
    • 要点:用gtest测试gtest,我们可以把gtest_unittest.cc里面的代码当作今后自己写测试代码时候的首选范例。 其实除了这个文件之外,在以下两个文件夹下还能找到大量可以作为范例的测试代码:
      1. gtestsamples
      2. gtest est

    系列文章索引:http://www.cnblogs.com/duxiuxing/p/4270836.html

  • 相关阅读:
    java课堂作业(四)
    java听课笔记(五)
    rsync 无密码传输文件
    HTTP返回码总结 (zz)
    打印1到最大的n位数
    两个栈模拟队列
    合并有序数组
    vim MiniBufExplorer 插件
    crontab 定时任务格式
    JNI调用测试
  • 原文地址:https://www.cnblogs.com/duxiuxing/p/4270986.html
Copyright © 2011-2022 走看看