以测试isOutOfRange函数为例,首先知道该函数在整个软件架构中处于底层(叶子),所以对它进行测试并不需要写桩模块,只需要写驱动模块。要注意的问题是:对于测试结果是否通过测试不要使用printf方式打印被测试函数的返回结果值,否则需要人工去检查结果了。

  使用边界值的方法可以得到5个测试用例,写的驱动模块代码如下:

  TestTriangle.cpp:

    /*
     * Copyright (c) 2008, 胡添发(hutianfa@163.com)
     *
     * 单元测试与集成测试
     *
     */
    #include "Triangle.h"
    /*
     * 测试isOutOfRange函数,使用边界值的方法(0,1,5,199,200)
     *
     */
    void testIsOutOfRange_try()
    {  
        if(isOutOfRange(0) == true)
        {
            printf("pass! ");
        }
        else
        {
            printf("fail! ");
        }
        if(isOutOfRange(1) == false)
        {
            printf("pass! ");
        }
        else
        {
            printf("fail! ");
        }
    }

    void main()
    {
           testIsOutOfRange_try();
    }
 
  小知识:做单元测试的时候,一般不直接在main函数中写所有的测试代码,否则的话,main函数将会非常庞大。正确的做法:针对每个函数分别创建一个或若干个(函数比较复杂时)测试函数,测试函数的名称习惯以test开头。

  写到这里发现重复的代码太多了,而且如果测试用例数量很多的话,对于测试结果的检查也将是很大的工作量。在测试有错误的时候,这样的单元测试结果也很难获得更多关于错误的信息。

  解决问题的途径可以采用cppUnit单元测试框架。不过这里为了让学生能够对单元测试和单元测试框架有进一步的理解,我决定自己写一个类似cppUnit的简单的测试框架。