用函数指针实现的一个测试框架

用函数指针实现的一个测试框架

c语言函数指针的定义形式:

返回类型 (*函数指针名称)(参数类型,参数类型,参数类型,…);

c++函数指针的定义形式:

返回类型 (类名称::*函数成员名称)(参数类型,参数类型,参数类型,….);    

  这里主要记录自己用C语言函数指针写的一个测试框架。可以根据输入执行想要执行的测试用例。
  关于一些比较基础和简单的例子就不例举了,自行google。文末链接我随手查的,如果还不知道函数指针是啥和怎么用就看看吧,先放在这里。

/*
未使用参数申明
一些函数原型要求的参数但实际可能不使用
从编码安全的角度,不使用的参数使用此宏定义消除PC-Lint和编译告警
*/
#ifndef UNREFERENCE_PARAM
#define UNREFERENCE_PARAM(x) ((void)(x))
#endif

//定义入参结构
typedef struct tagINPUT_ARG_S
{
    int argc;
    char **argv;
}INPUT_ARG_S;

//定义执行命令的函数结构
typedef struct tagFUNC_ENTRY_S
{
    char    cmdName[10];                           //命令名称
    int    (*diagFunc)(INPUT_ARG_S *input_arg);    //命令执行函数,函数指针
} FUNC_ENTRY_S;

//这里写了三个测试用例:test_a, test_b, test_c
FUNC_ENTRY_S g_Func[] = 
{
    {"aa",      test_a},
    {"bb",      test_b},
    {"cc",      test_c},
};

/******************************************************************************
* 功   能: 处理函数
* 输入参数: argc:命令组成个数, 参数个数
*          argv:命令字符串, 参数数组           
* 假如命令关键字为“xqf”,那么当输入命令:xqf bb时,调用第二个函数
******************************************************************************/
void DoDbgCmd(int argc, char *argv[])
{
    int index = 0;
    int funcNum = 0;
    bool findFlag = FALSE;
    FUNC_ENTRY_S *funcEntry = NULL;

    //数组中第1个元素是命令关键字,第2个元素是命令名称 
    if (argc <= 1)
    {
        printf("Please input correct command.\n");
        return;
    }

    funcNum = sizeof(g_Func) / sizeof(g_Func[0]); //计算出有几个处理函数     
    for (index = 0; index < funcNum; index++)
    {
        funcEntry = &g_Func[index];//得到函数句柄

        if (0 == strcmp(argv[1], funcEntry->cmdName)) //看看自己输入的操作名称是否能在函数句柄列表中找的到
        {
            findFlag = TRUE;
            break;
        }
    }

    if (TRUE == findFlag)//找到输入的操作名称
    {
        if (NULL != funcEntry->diagFunc)//对应的操作函数不为空
        {
            input_args.argc = argc;
            input_args.argv = argv;

            //执行对应的操作函数
            (void)funcEntry->diagFunc(&input_args);
        }
        else
        {
            printf("excute function is NULL!\n");
        }        
    }
    else
    {
        printf("Can't Find The Cmd.\n");
    }

    return;
}

int test_b(INPUT_ARG_S *input_arg)
{
    int argc = input_arg->argc;
    char **argv = input_arg->argv;

    int ret = 0;
    UNREFERENCE_PARAM(argv);//如果这个参数没用的话就这样操作

    //具体的测试体
    //省略
    printf("test b success\n");

    return ret;
}

//剩下两个我就不写了
int test_a(INPUT_ARG_S *input_arg)
{
    return 0;
}

int test_c(INPUT_ARG_S *input_arg)
{
    return 0;
}

1、http://www.cnblogs.com/TenosDoIt/p/3164081.html
2、http://www.cnblogs.com/windlaughing/archive/2013/04/10/3012012.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要用 Go 语言实现一个内容管理系统 (CMS),你需要考虑以下几个方面: 1. 据存储:你需要选择一种据库,并使用 Go 语言来连接和操作据库。常见的据库有 MySQL、PostgreSQL 和 MongoDB。 2. 网站框架:你可以使用 Go 语言内置的 net/http 库来构建网站后端,也可以使用第三方框架,比如 Gin、Echo 和 Buffalo。 3. 网站布局和样式:你可以使用 HTML、CSS 和 JavaScript 来设计网站的布局和样式。 4. 网站功能:你可以根据需求来实现各种功能,比如文章发布、评论管理、用户注册登录等。 在开始实现之前,建议先了解 Go 语言的基础知识,包括变量、类型、流程控制、函、指针等。同时,也建议了解一些常用的第三方库,比如用于据库操作的 GORM 库和用于模板渲染的 html/template 库。 ### 回答2: 使用Go语言实现一个CMS系统是完全可行的。Go是一种现代化的编程语言,它具有高效的并发性能和简洁的语法,非常适合构建Web应用程序。 首先,我们可以使用Go的HTTP包来处理HTTP请求和响应。通过创建一个HTTP服务器,我们可以监听特定的端口,并对请求进行路由和处理。可以使用gorilla / mux库来进行路由器设置和管理。 接下来,我们可以设计和实现据库模型。Go有很多流行的ORM(对象关系映射)库,如GORM和xorm。使用这些库,我们可以方便地将Go结构体映射到据库表,并进行基本的CRUD(创建、读取、更新、删除)操作。 然后,我们可以创建处理程序来处理特定的请求,例如创建、编辑和删除内容。可以使用HTML模板引擎(如html / template)来生成动态的HTML页面,也可以使用Go的JSON库将据以JSON格式返回给客户端。 为了保护用户登录和据的安全,我们可以使用Go的加密库来存储和验证用户的密码,并使用会话管理库(如gorilla / sessions)来跟踪用户的认证状态。 最后,我们可以使用Go的测试框架(如testing / testing)来编写和运行单元测试和集成测试,以确保系统的正确性和稳定性。 总之,使用Go语言实现一个CMS系统是一项有趣且具有挑战性的任务。Go的简洁性、高效性和并发性能使其成为构建可扩展的Web应用程序的理想选择。 ### 回答3: 使用Go语言来实现一个CMS(内容管理系统)可以借助于一些Go语言的库和框架来快速搭建一个功能完善的CMS系统。 首先,可以使用Go的Web框架如Gin或Echo来处理HTTP请求和路由,这样能够方便地创建和管理不同页面的接口。 其次,可以使用Go的据库驱动库如Gorm来连接据库,如MySQL或PostgreSQL等,以存储和管理网站的据。可以使用Gorm的模型和迁移功能来定义表结构和进行据库迁移。 接下来,可以利用Go的模板引擎如html/template来生成动态页面,通过将据库中的据和模板结合,可以实现页面的渲染更新。 此外,由于CMS系统通常需要进行用户身份验证和授权管理,可以使用Go的身份验证和授权库如jwt-go或casbin来实现用户的登录、验证和权限管理功能。 同时,为了方便系统的扩展和维护,可以使用Go的依赖管理工具如Go Modules来管理项目的依赖关系。 总结起来,用Go实现一个CMS系统需要使用到Go语言的Web框架据库驱动库、模板引擎、身份验证与授权库等,通过这些工具可以方便地创建和管理网站的接口、据库、页面、用户身份验证和权限管理等功能,从而实现一个功能完善的CMS系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值