请教大侠设计testcase
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 -> 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? 不知你被测函数是什么,可以传址的方式进入,在测试框架运行后,寻址,可以知道是运行了那个函数
但这种方式,测试函数与被测函数均需要修改代码
建议你去看一下cppunit,他可以不用修改被测函数,由测试代码调用,但你还是要了解被测函数输入,运行后结果,再前后比较才行
回复 #2 cwj007 的帖子
不懂,被测函数就是上面那个啊,我们写testcase都是在不改源代码的情况下进行的啊。
是不是这样可行?
1,首先,你需要编写一个line_c_mtx00()函数,作为桩;2,载编写一个驱动模块, 使用不同的输入参数作为不同的testcase: line_c_mtx**是一个函数指针,是调用不同函数,其实完全可以不这样做,用cppunit来做,就可以,line_c_mtx00是程序写的要测试函数,可我看不到你要测试什么,应当是业务吧,如果是业务,则需要输入,输出,看输出结果是不是你预期的
回复 #5 cwj007 的帖子
为何一定要用cppunit呢,不用就不可以做了吗?”可我看不到你要测试什么,“——上面的被测函数应该很简单吧,而且我也有了简单的函数说明。
还是不明白您的意思。 原帖由 TestCenter 于 2007-6-12 16:42 发表 http://bbs.51testing.com/images/common/back.gif
1,首先,你需要编写一个line_c_mtx00()函数,作为桩;
2,载编写一个驱动模块, 使用不同的输入参数作为不同的testcase:
我觉得你的方法比较好,能不能说具体一点,我是新手,不知道什么是桩。 从你上面的程序初步来看,应当是一组函数,跟据你的传参不同,运行不同的函数,不知是不是
回复 #8 cwj007 的帖子
一点都不错 具体的交流,我们短信息交流 在这感谢cwj007的无私帮助! 我的想法是:给入一个参数,使其调用某个函数(譬如说是调用函数line_c_mtx15 ),在testcase里能否这样写:
CU_ASSERT(line_c_mtx15 ==line_c_matrix_funcs[ func_no ]);
这样写有语法错误吗?对此我也不是太清楚,希望高手多指点。
好像是个状态机模型的框架
你的程序好像是一个状态机切换的框架: 根据具体发生的事件和当前的状态, 从line_c_matrix_tbl[][]查询功能号,功能号对应一个函数指针, 调用这个函数指针, 完成状态的切换,对吧!下面,看你要测试什么了。如果你需要测试这个框架是否正确,就可以自己编写1-2个函数作为函数指针,一个函数A(),执行的时候状态被改变;另外一个函数B(),执行的时候状态不会改变,作为桩模块,然后编写一个框架进行测试,主要是测试框架能否正确的调用函数A()、B(),以及状态切换;
如果你要测试整个部分,建议你先把状态机的图画出来,然后对每一个状态切换调用一次,实现路径覆盖,实现单元测试。可能这样更符合测试的要求。
回复 #13 TestCenter 的帖子
我只是想测试框架的正确性,也就是根据具体事件的发生来调用某个函数,该如何做呢?能具体点吗?还有什么是桩模块?
菜鸟一个,不要嫌烦啊。呵呵,谢谢大侠了。
页:
[1]