无锡小周 发表于 2007-12-4 00:48:22

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

单元测试框架我用的是CPPUnit,因线程函数就相当于一个死循环,请问如何对线程函数做单元测试?

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

请各位指教,谢谢!:)

[ 本帖最后由 无锡小周 于 2007-12-4 00:49 编辑 ]

zixuxuwu 发表于 2007-12-13 11:46:06

这样做好像不是很妥当,一时说不上会有什么问题,但是感觉很怪。是不是换个别的思路?
个人认为,你的测试函数应该考虑与被测的函数在同一个线程里,至于测试数据,倒不是非得在你的测试函数里生成。
仅供参考。

测试有前途 发表于 2007-12-18 15:48:18

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

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

无锡小周 发表于 2007-12-29 00:55:28

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

谢谢指教!:handshake

[ 本帖最后由 无锡小周 于 2007-12-29 00:58 编辑 ]
页: [1]
查看完整版本: ★请问在VC中如何对线程函数做单元测试?谢谢!