单元测试

一.单元测试是什么

单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。

单元测试一个很重要的逻辑是:在验证某一个单元的时候,默认它所依赖的其他模块都是正确的。

比如: 模块 A 调用了模块 B 和模块 C,模块 B 又调用了模块 D。

在对 A 进行单元测试的时候,通常会 mock 出模块 B 和模块 C,让它们返回我们期待(正常或者异常)的结果,只对 A 内部的流程正确性进行验证。

二.单元测试可以做什么

单元测试可以隔离程序部件并证明这些单个部件是正确的。

比如上图: 对人的三个部分分别做单元测试,证明腿,上身,头 各个部分的功能正确性。

三.单元测试不能做什么

单元测试不能保证各个组件组装之后的整体的正确性。这不属于单元测试的范畴。

保证整体正确性是由集成测试来保证的。

比如说,把腿,上身,头组装起来,之后整个人的功能是否正确,单元测试并不能保证。有可能组装的顺序出了问题(头在脚下边,上身倒置在头下边)。

四.为什么要做单元测试

 a.单元测试可以及早的发现问题。

    在一个模块/单元写好之后,对它进行测试,而不是等到系统集成之后再进行正确性的验证。可以在早期发现并改正 bug。

 b.单元测试可以以最小环境验证代码的正确性。

    如果真实环境中,你的代码依赖了服务 A,服务 B,而服务 D 依赖你编写的服务,没有单元测试,你需要保证服务 A,服务 B,服务 D 正常工作,然后在调用起始端发起调用,然后进行测试。这个过程中花费的时间和精力,远远大于编写,维护和运行单元测试的时间与精力。

 c.单元测试可以摆脱依赖真实环境,验证自己代码正确性。

    如果你的代码依赖于外部服务,可以 mock 出来这个外部服务,并且返回对应的值。摆脱外部服务来验证自己代码的正确性。

   eg: 你写一个接口去查询外部服务的接口,针对不同返回结果,有不同的处理流程。使用单元测试,就可以mock 出这个服务,返回不同的结果,进行验证。

 d.单元测试可以增强对自己代码的信心,也便于后期他人的维护。

   在每次修改代码之后,可以运行单元测试,验证修改的正确性。

   接手别人的代码修改之后,心里没底?运行单元测试就知道改的有没有问题了。

e.单元测试的 收获/投入比 随着软件生命周期增大而增大。

   单元只需要在初期花费一些时间和精力,在接口变动的时候,进行维护。可以随时随地的快速运行测试,减少人工确认代码正确性的过程。

参考资料:

https://zh.wikipedia.org/wiki/单元测试

junit入门文档: http://www.cnblogs.com/caoyuanzhanlang/p/3530267.html

你可能感兴趣的:(单元测试)