单元测试是针对每个程序模块,解决5个方面的问题:模块接口、局部数据结构、边界条件、独立的路径和错误处理。
1.模块接口:
对模块接口的测试,是检查进出程序单元的数据流是否正确。对模块接口数据流的测试必须在任何其他测试之前进行,因为如果不能确保数据正确地输入和输出的话,所有的测试都是没有意义的。
2.局部数据结构:
在模块工作过程中,必须测试其内部的数据能否保持完整性,包括内部数据的内容、形式及相互关系不发生错误。
3.独立的路径:
在单元测试中,最主要的测试是针对路径的测试。测试用例必须能够发现由于计算错误、不正确的判定或不正常的控制流而产生的错误。
4.边界条件:
软件常常在边界地区发生问题。
5. 错误处理:
测试出错处理的要点是模块在工作中发生了错误,其中的出错处理设施是否有效。
单元测试的过程
单元测试常常和代码编写同步进行,在完成了程序编写、复查和语法正确性验证后,就应进行单元测试用例设计。 在对每个模块进行单元测试时,不能完全忽视它们和周围模块的相互联系。为模拟这一联系,在进行单元测试时,需设置若干辅助测试模块。辅助模块有两种,一种是驱动模块(driver),用以模拟被测模块的上级模块。驱动模块在单元测试中接受测试数据,把相关的数据传送给被测模块,启动被测模块,并打印出相应的结果。另一种是桩模块(stub),用以模拟被测模块工作过程中所调用的模块。桩模块由被测模块调用,它们一般只进行很少的数据处理,例如打印入口和返回,以便于检验被测模块与其下级模块的接口。
驱动器和桩都是额外的开销,这两种模块虽然在单元测试中必须编写,但却不作为最终的软件产品提供用户。如果驱动器和桩很简单的话,那么开销相对较低,然后,使用“简单”的模块是不可能进行足够的单元测试的,模块间接口的全面检验要推迟到集成测试时进行。