通常而言,单元测试是在软件开发过程中要进行的最低级别的测试活动,或者说是针对软件设计的最小单位即程序模块、函数、类或方法所进行的正确性检验的测试工作,其目的在于发现每个单元内部可能存在的错误或缺陷。
单元测试步骤
一般情况下由程序员完成单元测试工作,单元测试也可以看作是编码工作的一部分,在编码的过程中考虑测试问题,得到的将是更优质的代码。所以,单元测试有时也称自测试。许多集成开发环境(IDE)都可以集成各种单元测试工具帮助编码人员进行单元测试(如Eclipse环境中集成Junit)。必要时也可以由测试团队专门进行单元测试。单元测试的主要工作分两个步骤。
(1)人工静态检查
人工静态检查也称为静态测试,可以保证代码算法的逻辑正确性、清晰性、规范性、一致性、算法高效性。尽可能地发现程序中可能存在的错误或缺陷。
(2)动态执行跟踪
动态执行跟踪也称为动态测试,是通过设计测试用例,执行待测程序来跟踪比较实际结果与预期结果来发现错误或缺陷。
单元测试的策略
(1)孤立的单元测试策略(Isolation Unit Testing),不考虑每个模块与其他模块之间的关系,为每个模块设计桩模块和驱动模块,每个模块进行独立的单元测试。优点是操作简单、容易,可以达到较高的结构覆盖率。缺点是桩函数和驱动函数工作量很大。
(2)自顶向下的单元测试策略(Top Down Unit Testing),先对最顶层的单元进行测试,把顶层所调用的单元做成桩模块;再对第二层进行测试,使用上面已测试的单元做驱动模块;如此类推直到测试完所有模块。此策略可以节省驱动函数的开发工作量,测试效率较高。缺点是随着被测单元一个一个被加入,测试过程将变得越来越复杂,并且开发和维护的成本将增加。
(3)自底向上的单元测试策略(Bottom Up Unit Testing),先对模块调用层次图上最底层的模块进行单元测试,模拟调用该模块的模块做驱动模块;然后再对上面一层做单元测试,用下面已被测试过的模块做桩模块;以此类推,直到测试完所有模块。此策略优点是可以节省桩函数的开发工作量,测试效率较高。缺点是它不是纯粹的单元测试,底层函数的测试质量对上层函数的测试将产生很大的影响。
单元测试已经不仅仅是只有编码完成以后才能进行的工作了,单元测试通常在项目的详细设计阶段已经开始了,贯穿于项目开发的生命周期中。单元测试被认为是集成测试的基础,只有通过了单元测试,才能将各个单元集成在一起进行集成测试。