多语言展示
当前在线:1389今日阅读:117今日分享:28

软件测试之单元测试

按测试阶段,软件测试分为单元测试、集成测试、系统测试、验收测试。本篇经验介绍单元测试
方法/步骤
1

单元测试的概念:单元测试就是对软件中最小的可测试单元进行检查和验证。

2

里有一个职位是测试工程师,那么测试工程师一一般情况下是不会接触到单元测试的。单元测试一般是针对代码的,所以一般是由开发人员进行的。一个开发人员开发代码不仅仅是编码,其实是包括编码+单元测试。只有通过了单元测试后,才能将代码提交到SVN等上。所以,单元测试的一个特性是:单元测试一般是针对代码的,所以一般是由开发人员进行的。

3

为什么要进行单元测试呢?一个BUG隐藏的时间越久,修复这个BUG的代价就越大,根据调查发现,一个BUG最后修复要比开始就修复的成本高10倍。而单元测试是最早发现BUG的一个阶段,也是修改BUG付出代价最小的一个阶段,所以单元测试是非常重要的。

4

可是,许多软件项目在开发的过程中根本就没有单元测试,甚至许多开发人员从来没有写过单元测试,这是为什么呢?首先比较重要的一点是,现在许多软件项目都特别的强调进度,而单元测试的代码可能比实际项目的代码还要多,除去单元测试确实减少了很多时间,但却是以项目质量以及后续大量的产品维护为代价,其实是得不偿失的;而且,有许多开发人员就是为了写单元测试而写单元测试,就像是应付差事、应付领导,没有意识到单元测试的重要性,根本发现不了问题。种种原因导致,许多软件项目中单元测试都缺失了,这其实是项目管理的责任。

5

单元测试是一个方法层面的测试,也是粒度最细的测试。用于测试每一个函数、每一个类以及类的每一个方法的功能。举例说明:类似于C的面向过程的,其测试单元为每一个函数,函数有输入数据的参数,也有返回值,我们做单元测试的目的就是保证不同的输入,其输出都正确,函数中的每一个逻辑,比如if、else等逻辑都可以走的到,确保这个函数的健壮性。如果是java这种面向对象,其测试单元就是每一个类,测试这个类包括里面的每一个方法的正确性。

6

单元测试就是测试一个螺丝钉本身的功能。我们不会去关注这个螺丝钉具体用在什么地方,和其他零件是否能很好的匹配,我们只关心这个螺丝钉本身有没有问题,是否符合需求

7

单元测试的另一个原则就是尽量保证各个测试用例是相互独立的。比如,我在一个函数A中调用了函数B,现在对函数A进行单元测试,结果出现了问题,那么问题到底是函数A导致的,还是函数B导致的呢?甚至函数B中又调用了函数C,那我还要去了解函数C的实现吗?肯定是不行的。所以我们一般会模拟函数B,写一个模拟b函数,这个函数b将模拟函数B返回一些值给函数A,保证我们写的函数b没有问题(只是返回一个值),从而保证在测试函数A的时候,不会受到函数B的影响。

8

单元测试有非常多的好处:可以尽早的发现缺陷;有利于重构;简化集成,保证最小单元的稳定性和正确性,之后再搞系统测试的时候,就不需要花时间去确认单元内部是否有问题了;减少文档,现在提倡代码级文档,不需要手动去维护一个专门的文档,浪费大量的时间。

9

下面简单介绍一下几种单元测试框架JUnit就是一个Java语言的单元测试框架,是一个开放源代码的Java测试框架,用于编写和运行可重复的测试。

10

Instrumentation,是基于JUnit的一个测试框架,可用来测试android的组件。

11

NunitNUnit是一个单元测试框架,专门针对于.NET来写的,Nunit和JUnit看起来很像,其实Nunit就是基于JUnit而来的。

12

PHPUnit看名字就知道,测试PHP的,它是一款轻量级的php测试框架,可以通过命令操控测试脚本,而且功能酷炫,使用起来还特别简单

13

CppUnit目前针对C++项目的测试工具中,开源的CppUnit是最著名的测试工具之一。使用CppUnit做C++项目的单元测试非常的方便

注意事项

单元测试不可能覆盖全部的路径,不可能无休止的进行测试

推荐信息