51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4590|回复: 3
打印 上一主题 下一主题

[求助] ★请问在VC中如何对线程函数做单元测试?谢谢!

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-12-4 00:48:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单元测试框架我用的是CPPUnit,因线程函数就相当于一个死循环,请问如何对线程函数做单元测试?

比如用线程函数清空主线程中创建的链表,我用的方法是:在测试函数中先创建链表,往里面插点数据,然后启动线程,然后让测试函数Sleep()一会儿(主要是有时间让线程清空链表),最后比对结果是否正确。但是这样做很难做到同步,Sleep()有不确定性,用信号量同步又有多余,因为产品代码(线程函数)中不需要信号量,请问测试线程函数有没有什么更好的方法?

请各位指教,谢谢!

[ 本帖最后由 无锡小周 于 2007-12-4 00:49 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2007-12-13 11:46:06 | 只看该作者
这样做好像不是很妥当,一时说不上会有什么问题,但是感觉很怪。是不是换个别的思路?
个人认为,你的测试函数应该考虑与被测的函数在同一个线程里,至于测试数据,倒不是非得在你的测试函数里生成。
仅供参考。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2007-12-18 15:48:18 | 只看该作者
原帖由 无锡小周 于 2007-12-4 00:48 发表
比如用线程函数清空主线程中创建的链表,我用的方法是:在测试函数中先创建链表,往里面插点数据,然后启动线程,然后让测试函数Sleep()一会儿(主要是有时间让线程清空链表),最后比对结果是否正确。但是这样做很难做到同步,Sleep()有不确定性,用信号量同步又有多余,因为产品代码(线程函数)中不需要信号量,请问测试线程函数有没有什么更好的方法


按照你举的例子,测试线程函数不一定要通过创建一个线程,然后由其来执行啊.
有个建议,你可以直接在主函数内调用该函数,然后执行完之后返回到主函数进行检查,这样就避免了时间不同步的问题.
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2007-12-29 00:55:28 | 只看该作者
感谢楼上两位的指点,但是有一个问题,如果线程函数是个无限循环,其中的主要部分是:
while(pObject->flag)
{
    ....
}
它的循环条件在产品代码中是由其它线程设为false才退出的(pObject->flag=false,循环条件由创建线程时当参数传给线程函数,比如把指向Object的指针传入),如果在测试函数中直接执行这类线程函数进行对它的测试,测试函数将陷入死循环。请问这种线程函数该如何在测试函数中进行测试?

谢谢指教!

[ 本帖最后由 无锡小周 于 2007-12-29 00:58 编辑 ]
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-23 17:14 , Processed in 0.069566 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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