你们好,最近小活发现有诸多的小伙伴们对于单元测试主要针对模块的几个基本特征进行测试,单元测试这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。
1、单元测试的概念:
2、单元测试就是对软件中最小的可测试单元进行检查和验证。
3、如果一个公司里有一个职位是测试工程师,那么测试工程师一一般情况下是不会接触到单元测试的。单元测试一般是针对代码的,所以一般是由开发人员进行的。一个开发人员开发代码不仅仅是编码,其实是包括编码+单元测试。只有通过了单元测试后,才能将代码提交到SVN等上。
4、所以,单元测试的一个特性是:单元测试一般是针对代码的,所以一般是由开发人员进行的。
5、为什么要进行单元测试呢?一个BUG隐藏的时间越久,修复这个BUG的代价就越大,根据调查发现,一个BUG最后修复要比开始就修复的成本高10倍。而单元测试是最早发现BUG的一个阶段,也是修改BUG付出代价最小的一个阶段,所以单元测试是非常重要的。
6、可是,许多软件项目在开发的过程中根本就没有单元测试,甚至许多开发人员从来没有写过单元测试,这是为什么呢?首先比较重要的一点是,现在许多软件项目都特别的强调进度,而单元测试的代码可能比实际项目的代码还要多,除去单元测试确实减少了很多时间,但却是以项目质量以及后续大量的产品维护为代价,其实是得不偿失的;而且,有许多开发人员就是为了写单元测试而写单元测试,就像是应付差事、应付领导,没有意识到单元测试的重要性,根本发现不了问题。种种原因导致,许多软件项目中单元测试都缺失了,这其实是项目管理的责任。
7、单元测试是一个方法层面的测试,也是粒度最细的测试。用于测试每一个函数、每一个类以及类的每一个方法的功能。
8、举例说明:
9、类似于C的面向过程的,其测试单元为每一个函数,函数有输入数据的参数,也有返回值,我们做单元测试的目的就是保证不同的输入,其输出都正确,函数中的每一个逻辑,比如if、else等逻辑都可以走的到,确保这个函数的健壮性。
10、如果是java这种面向对象,其测试单元就是每一个类,测试这个类包括里面的每一个方法的正确性。
11、单元测试就是测试一个螺丝钉本身的功能。我们不会去关注这个螺丝钉具体用在什么地方,和其他零件是否能很好的匹配,我们只关心这个螺丝钉本身有没有问题,是否符合需求
12、单元测试的另一个原则就是尽量保证各个测试用例是相互独立的。
13、比如,我在一个函数A中调用了函数B,现在对函数A进行单元测试,结果出现了问题,那么问题到底是函数A导致的,还是函数B导致的呢?甚至函数B中又调用了函数C,那我还要去了解函数C的实现吗?肯定是不行的。所以我们一般会模拟函数B,写一个模拟b函数,这个函数b将模拟函数B返回一些值给函数A,保证我们写的函数b没有问题(只是返回一个值),从而保证在测试函数A的时候,不会受到函数B的影响。
14、单元测试有非常多的好处:
15、可以尽早的发现缺陷;
16、有利于重构;
17、简化集成,保证最小单元的稳定性和正确性,之后再搞系统测试的时候,就不需要花时间去确认单元内部是否有问题了;
18、减少文档,现在提倡代码级文档,不需要手动去维护一个专门的文档,浪费大量的时间。
19、下面简单介绍一下几种单元测试框架
20、JUnit就是一个Java语言的单元测试框架,是一个开放源代码的Java测试框架,用于编写和运行可重复的测试。
21、Instrumentation,是基于JUnit的一个测试框架,可用来测试android的组件。
22、Nunit
23、NUnit是一个单元测试框架,专门针对于.NET来写的,Nunit和JUnit看起来很像,其实Nunit就是基于JUnit而来的。
24、PHPUnit
25、看名字就知道,测试PHP的,它是一款轻量级的php测试框架,可以通过命令操控测试脚本,而且功能酷炫,使用起来还特别简单
26、CppUnit
27、目前针对C++项目的测试工具中,开源的CppUnit是最著名的测试工具之一。使用CppUnit做C++项目的单元测试非常的方便
以上就是单元测试这篇文章的一些介绍,希望对大家有所帮助。
标签:
免责声明:本文由用户上传,如有侵权请联系删除!