51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4168|回复: 13
打印 上一主题 下一主题

[讨论] 请教大侠设计testcase

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-6-7 10:24:28 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
int LINE_C_CTL( struct LINE_C_WORK *wk , int event )
{
    int func_no , ret, old_sts;

    event_bak = event;
    func_no = line_c_matrix_tbl[event][wk->sts];
    old_sts = wk->sts;


    dbg_print(" >>>>> (%d)line_c_matrix_tbl[ev=%d][sts=%d] -> mtx%02d\n" ,
        wk->no, event, wk->sts, func_no );                   /* VR12-V2.0-ccl-011 C */

    ret = line_c_matrix_funcs[ func_no ] ( wk );
    if (old_sts != wk->sts)
        dbg_print(" >>>>> (%d)line_c_mtx%02d done : now sts=%d\n" ,
            wk->no, func_no , wk->sts );                     /* VR12-V2.0-ccl-011 C */

    return ret;
}

上面是被测函数


int (* const line_c_matrix_funcs[])(struct LINE_C_WORK *) = {
    line_c_mtx00 , line_c_mtx01 , line_c_mtx02 , line_c_mtx03 ,
    line_c_mtx04 , line_c_mtx05 , line_c_mtx06 , line_c_mtx07 ,
    line_c_mtx08 , line_c_mtx09 , line_c_mtx10 , line_c_mtx11 ,
    line_c_mtx12 , line_c_mtx13 , line_c_mtx14 ,
    line_c_mtx15 , line_c_mtx16 , line_c_mtx17 , line_c_mtx18
};


line_c_mtx00~line_c_mtx18都是函数名,其实整个被测函数的意思就是:根据不同的输入,来调用不同的函数。可这19个函数虽然处理过程不一样,可它们的return都是0,这使得不管调用哪个函数,被测函数里的ret值始终为0。
这函数该如何写testcase?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

14#
 楼主| 发表于 2007-6-14 09:08:31 | 只看该作者

回复 #13 TestCenter 的帖子

我只是想测试框架的正确性,也就是根据具体事件的发生来调用某个函数,
该如何做呢?能具体点吗?还有什么是桩模块?
菜鸟一个,不要嫌烦啊。呵呵,谢谢大侠了。
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2007-6-13 22:59:07 | 只看该作者

好像是个状态机模型的框架

你的程序好像是一个状态机切换的框架: 根据具体发生的事件和当前的状态, 从line_c_matrix_tbl[][]查询功能号,功能号对应一个函数指针, 调用这个函数指针, 完成状态的切换,对吧!

下面,看你要测试什么了。如果你需要测试这个框架是否正确,就可以自己编写1-2个函数作为函数指针,一个函数A(),执行的时候状态被改变;另外一个函数B(),执行的时候状态不会改变,作为桩模块,然后编写一个框架进行测试,主要是测试框架能否正确的调用函数A()、B(),以及状态切换;

如果你要测试整个部分,建议你先把状态机的图画出来,然后对每一个状态切换调用一次,实现路径覆盖,实现单元测试。可能这样更符合测试的要求。
回复 支持 反对

使用道具 举报

该用户从未签到

12#
 楼主| 发表于 2007-6-13 12:53:44 | 只看该作者
我的想法是:给入一个参数,使其调用某个函数(譬如说是调用函数line_c_mtx15 ),
在testcase里能否这样写:
                  CU_ASSERT(line_c_mtx15 ==line_c_matrix_funcs[ func_no ]);
这样写有语法错误吗?对此我也不是太清楚,希望高手多指点。
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2007-6-13 12:50:36 | 只看该作者
在这感谢cwj007的无私帮助!
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2007-6-13 12:14:09 | 只看该作者
具体的交流,我们短信息交流
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2007-6-13 11:36:56 | 只看该作者

回复 #8 cwj007 的帖子

一点都不错
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2007-6-13 11:05:20 | 只看该作者
从你上面的程序初步来看,应当是一组函数,跟据你的传参不同,运行不同的函数,不知是不是
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2007-6-13 09:42:29 | 只看该作者
原帖由 TestCenter 于 2007-6-12 16:42 发表
1,首先,你需要编写一个line_c_mtx00()函数,作为桩;
2,载编写一个驱动模块, 使用不同的输入参数作为不同的testcase:


我觉得你的方法比较好,能不能说具体一点,我是新手,不知道什么是桩。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2007-6-13 09:41:15 | 只看该作者

回复 #5 cwj007 的帖子

为何一定要用cppunit呢,不用就不可以做了吗?
”可我看不到你要测试什么,“——上面的被测函数应该很简单吧,而且我也有了简单的函数说明。
还是不明白您的意思。
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2007-6-12 17:33:25 | 只看该作者
line_c_mtx**是一个函数指针,是调用不同函数,其实完全可以不这样做,用cppunit来做,就可以,line_c_mtx00是程序写的要测试函数,可我看不到你要测试什么,应当是业务吧,如果是业务,则需要输入,输出,看输出结果是不是你预期的
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2007-6-12 16:42:13 | 只看该作者

是不是这样可行?

1,首先,你需要编写一个line_c_mtx00()函数,作为桩;
2,载编写一个驱动模块, 使用不同的输入参数作为不同的testcase:
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2007-6-12 15:41:14 | 只看该作者

回复 #2 cwj007 的帖子

不懂,被测函数就是上面那个啊,
我们写testcase都是在不改源代码的情况下进行的啊。
回复 支持 反对

使用道具 举报

该用户从未签到

2#
发表于 2007-6-12 14:54:28 | 只看该作者
不知你被测函数是什么,可以传址的方式进入,在测试框架运行后,寻址,可以知道是运行了那个函数
但这种方式,测试函数与被测函数均需要修改代码
建议你去看一下cppunit,他可以不用修改被测函数,由测试代码调用,但你还是要了解被测函数输入,运行后结果,再前后比较才行
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-15 19:53 , Processed in 0.075369 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表