在上一讲“单元测试的尝试”里我们遇到了几个问题:
1、代码重复的问题太多
2、测试结果需要人工去检查
3、对测试的总体信息也无从得知
本讲将构建一个简单的单元测试框架来解决以上的问题:
1、代码重复的问题太多
这个问题很容易解决,只需要把判断预期结果和实际结果的逻辑提取到某个函数中即可。从整个代码来看,有两种类型的结果的函数:
(1)返回布尔型
(2)返回整数
因此,需要两个类型的判断预期结果和实际结果是否相符的函数:
1. /* 2. * 判断是否取值为真 3. */ 4. void assertTrue(char *msg, bool actual) 5. { 6. if(actual) 7. { 8. printf("."); 9. } 10. else 11. { 12. printf("F"); 13. } 14. } 15. 16. /* 17. * 判断预期结果和实际结果是否相符 18. */ 19. void assertEquals(char *msg, int expect, int actual) 20. { 21. if(expect == actual) 22. { 23. printf("."); 24. } 25. else 26. { 27. printf("F"); 28. } 29. } |
小知识:XUnit系列的框架的习惯使用assert*的命名来定义判断函数,对于通过的测试习惯打印一个“.”号,而对于失败的测试习惯打印一个“F”。
2、测试结果需要人工去检查
对于测试结果不要使用printf方式打印被测试函数的返回结果值就可以避免这个问题。
3、对测试的总体信息也无从得知
除了问题1的解决办法里使用“.”表示测试通过和“F”表示测试失败可以提高对测试结果的信息的直观性之外,做单元测试的人还希望能够得到以下的信息:
(1)执行的测试用例总数、通过的数量和失败的数量
(2)测试执行的时间
(3)如果测试用例执行失败了,希望知道是哪个测试用例失败,从而去分析失败的原因。