就在几天前,我开始研究一个叫做check的单元测试框架,
我打算在Linux下的c代码上运行测试
现在检查和一些设计良好的代码和一些测试代码可以帮助我验证
基本功能是正确的,
我的意思是,只需查看中的变量,然后再返回,就很容易了
确定函数是否正确
但假设我想测试一个动态内存结构,它有很多空闲的malloc,
事实证明,我可以把数据放进去,然后再把正确的数据拿出来。
但这并不能证明我在这个过程中没有打破一些记忆,
比方说,我忘记释放一半内存,丢失了指针(一个经典的memleak)。
该代码可能会通过大部分单元测试
那么现在问题是:
使用Valgrind运行整个单元测试代码并让他
是否检测到任何malloc/free问题?(或者可能编译成电子围栏之类的东西?)
这感觉像是个好主意,但我不确定我在这里干什么
谢谢
约翰
更新:谢谢道格拉斯和乔纳森,
这似乎是个好主意,我应该继续做下去:-)
更新:Valgrind是一个有趣的工具,但是我发现第一个memleaks就是这么做的
在测试框架中,而不是我自己的代码(尽管很有趣)。
因此,剩下的提示是,在将自己的代码颠倒过来之前,验证您使用的单元测试框架没有泄漏。
我只需要一个空的测试用例,
从那时起,除了单元测试框架外,什么都没有运行
我们当然会这样做——在单元测试中运行valgrind比在完整程序中运行valgrind要容易得多
此外,任何内存错误都会定位到单元测试正在测试的代码区域,这使得修复更容易
另外,检查您是否已经修复了它更容易-因为您正在运行单元测试,而不是针对完整程序的更复杂的测试
如果您以自动方式运行valgrind,您可能需要--error exitcode=<;数量>;[默认值:0]
指定Valgrind报告时要返回的替代退出代码
运行中的错误。当设置为
默认值(零),返回值
来自瓦尔格兰的人永远是最棒的
正在执行的进程的返回值
模拟的。当设置为非零时
值,则返回该值,
如果Valgrind检测到任何错误。这
用于将Valgrind用作零件
一个自动化测试套件,因为它
使检测测试用例变得容易
Valgrind报告了错误,
只需检查返回代码
http://valgrind.org/docs/manual/manual-core.html#manual-core.erropts