2.4 单元测试也会崩溃
运行测试还有一个可能结果,那就是崩溃。通常意义上讲,C不是一种安全的语言。C代码可能会不知道跑到哪里,再也不返回了。sprintf()就是一个危险的函数。如果你传入的缓冲太小,内存就会被破坏。这个错误也许会让整个系统马上崩溃。它也可能会在以后崩溃。这时的行为很难说。结果是,一个测试可能无声息地运行通过并结束,或者提前退出运行但看上去没有错误,也可能是“嘣”地一声崩溃。
当你发现一个无声的失败或者崩溃的测试时,可以让测试框架来帮你确认是什么地方出了错。有时,一个对产品代码的改动会导致一个从前通过的测试失败,甚至崩溃。所以在崩溃之前,你要知道到底是哪个测试失败了。
因为测试框架除了测试失败以外通常都保持安静,当测试崩溃时,你可能不会得到什么有用的输出。Unity和CppUTest都提供了一个命令行参数来让测试运行于“冗余模式”(-v)。使用了-v,每个TEST()在运行前都会先写出自己的名字。结果是,最后一个涉及的TEST()就是引起崩溃的原因。
你还可以过滤测试组(-g testgroup)和测试用例(-n testname)。这会让你精确地知道是哪个测试用例在运行。这些对于寻找崩溃原因很有帮助。
相关文章
- 10-14《测试驱动的嵌入式C语言开发》——3.2节LED驱动都做些什么
- 10-14《测试驱动的嵌入式C语言开发》——2.3节CppUTest:一个用C++实现的自动化单元测试框架
- 10-14《测试驱动的嵌入式C语言开发》——2.1节什么是自动化单元测试框架
- 10-14《测试驱动的嵌入式C语言开发》——3.1节具有可测性的C模块的那些元素
- 10-14《测试驱动的嵌入式C语言开发》——第3章开始一个C语言模块
- 10-14《测试驱动的嵌入式C语言开发》——2.6节我们到哪里了
- 10-14《测试驱动的嵌入式C语言开发》——2.5节 “四阶段”模式
- 10-14《测试驱动的嵌入式C语言开发》——2.4节单元测试也会崩溃