技术宅,fat-man

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

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

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

复制代码
#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   codestyle  阅读(514)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示