技术宅,fat-man

增加语言的了解程度可以避免写出愚蠢的代码

导航

应要求写的比较简单的单元测试代码

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>

/*
作者:猪头
被测模块功能:编写一个累加整数数组元素的函数,并把累加结果作为函数返回值返回
被测模块参数:整数指针指向数组第一个元素;整数表示数组元素个数 
参数异常:如果指针为空则应该返回-1 ,表示传入者参数有错误 
*/



/*被测模块*/
int sum(int *array,int length)
{
    int index = 0;
    int sum = 0;
    if (array == NULL)
    {
        return sum;
        /*我故意埋下的BUG就是为了测试用例2失败 ,因为按照功能约定,应该返回-1*/ 
    }
    
    for(index=0;index<length;index++)
    {
        sum += array[index];                         
    }
    return sum;
}


/*测试用例,断言该数组传入应该输出6 否则认为该函数实现存在BUG*/
void testcase1()
{
     int a[] = {1,2,3};
     assert(sum(a,3) == 6);     
}

/*测试用例,断言该数组指针是NULL时应该按照约定返回-1,否则认为函数实现存在BUG*/
void testcase2()
{
     assert(sum(NULL,3) == -1); 
}

int main(int argc, char *argv[])
{
  /*手工调用测试用例。在测试框架会自动调用*/
  testcase1();
  testcase2();
  
  system("PAUSE");    
  return 0;
}

该代码并未使用cppUnit这样的测试框架,因为我的环境没有这个东西,况且我觉得不用框架或许可以更清晰的表达单元测试的核心理念:定义接口功能以及输入输出,我们再调用之,看它是否能按照约定或者它声称的方式返回结果,而测试框架解决了什么问题呢:1自动调用测试用例。2为测试用例准备执行环境。3 用例代码复用(是的,测试用例的代码也需要DRY)。如有理解有误的欢迎留言指正,谢谢

posted on 2012-09-03 15:08  codestyle  阅读(519)  评论(0)    收藏  举报