第二,单元测试用例详解
在实际工作中,想做好单元测试,就必须对单元测试的用例设计有深入的理解。
通常来讲,单元测试的用例是一个“输入数据”和“预计输出”的集合。 你需要针对确定的输入,根据逻辑功能推算出预期正确的输出,并且以执行被测试代码的方式进行验证,用一句话概括就是“在明确了代码需要实现的逻辑功能的基础上,什么输入,应该产生什么输出”。
但是,对于单元测试来讲,测试用例的“输入数据”和“预计输出”可能远比你想得要复杂得多。
首先,来解释一下单元测试用例“输入数据”都有哪些种类,如果你想当然的认为只有被测试函数的输入参数是“输入数据”的话,那就大错特错了。 这里总结了几种“输入数据”,希望可以帮助理解什么才是完整的单元测试“输入数据”:
被测试函数的输入参数;
被测试函数内部需要读取的全局静态变量;
被测试函数内部需要读取的成员变量;
函数内部调用子函数获得的数据;
函数内部调用子函数改写的数据;
嵌入式系统中,在中断调用时改写的数据;
然后,让我们再来看看“预计输出”,如果没有明确的预计输出,那么测试本身就失去了意义。同样地,“预计输出” 绝对不是只有函数返回值这么简单,还应该包括函数执行完成后所改写的所有数据。 具体来看有以下几大类:
被测试函数的返回值;
被测试函数的输出参数;
被测试函数所改写的成员变量;
被测试函数所改写的全局变量;
被测试函数中进行的文件更新;
被测试函数中进行的数据库更新;
被测试函数中进行的消息队列更新;
另外,对于预计输出值,你必须严格根据代码的功能逻辑来设定,而不能通过阅读代码来推算预期输出,否则就是“掩耳盗铃”了。
你不要觉得好笑,这种情况经常出现。主要原因是,开发工程师自己测试自己写的代码时会有严重的思维惯性,以至于会根据自己的代码实现来推算预计输出。
最后,我还要再提一个点,如果某些等价类或者边界值,开发工程师在开发的时候都没有考虑到,测试的时候就更不会去设计对应的测试用例了,这样也就会造成测试盲区。
软件测试52讲---笔记整理