单元测试的步骤:
1、 理解需求和设计
理解设计是很重要的,特别是要搞清楚被测试模块在整个软件中所处的位置,这对测试的内容将会有很大的影响。需要记住的一个原则就是:好的设计,各模块只负责完成自己的事情,层次与分工是很明确的。在单元测试的时候,可以不用测试不属于被测试模块所负责的功能,以减少测试用例的冗余,集成测试的时候会有机会测试到的。
举例:
1. /*
2.
3. * 判断三条边是否能够组成三角形
4.
5. * 返回值:true-是; false-否
6.
7. */
8.
9. bool isTriangle(int a, int b, int c);
测试该函数的时候,只需要测试三条边(在合法的取值范围内的整数)是否能够满足两边之和是否大于第三边的功能,而不需要测试三条边是否在合法的范围(0, 200)之间的整数,因为调用该函数之前,一定要先通过下面函数的检查,要是检查不通过,就不会执行isTriangle函数。
1. /*
2.
3. * 判断三条边是否合法(即:判断三条边都在合法的范围内)
4.
5. * 返回值:true-是; false-否
6.
7. */
8.
9. bool isLegal(int a, int b, int c);
所以,单元测试主要是关注本单元的内部逻辑,而不用关注整个业务的逻辑,因为会有别的模块去完成相关的功能。
白盒测试实例之七——单元测试的尝试以测试isOutOfRange函数为例,首先知道该函数在整个软件架构中处于最底层(叶子),所以对它进行测试并不需要写桩模块,只需要写驱动模块。要注意的问题是:对于测试结果是否通过测试不要使用printf方式打印被测试函数的返回结果值,否则就需要人工去检查结果了。
使用边界值的方法可以得到5个测试用例,写的驱动模块代码如下:
TestTriangle.cpp:
1. /*
2. * Copyright (c) 2008, 胡添发(hutianfa@163.com)
3. *
4. * 单元测试与集成测试
5. *
6. */
7. #include "Triangle.h"
8. /*
9. * 测试isOutOfRange函数,使用边界值的方法(0,1,5,199,200)
10. *
11. */
12. void testIsOutOfRange_try()
13. {
14. if(isOutOfRange(0) == true)
15. {
16. printf("pass!\n");
17. }
18. else
19. {
20. printf("fail!\n");
21. }
22.
23. if(isOutOfRange(1) == false)
24. {
25. printf("pass!\n");
26. }
27. else
28. {
29. printf("fail!\n");
30. }
31.
32. }
33.
34.
35. void main()
36. {
37. testIsOutOfRange_try();
38. }
小知识:做单元测试的时候,一般不直接在main函数中写所有的测试代码,否则的话,main函数将会非常庞大。正确的做法:针对每个函数分别创建一个或若干个(函数比较复杂时)测试函数,测试函数的名称习惯以test开头。
写到这里发现重复的代码太多了,而且如果测试用例数量很多的话,对于测试结果的检查也将是很大的工作量。在测试有错误的时候,这样的单元测试结果也很难获得更多关于错误的信息。