碰撞测试是汽车开发活动中的重要组成部分。全部汽车在上市以前都要通过碰撞测试,并公布测试结果。碰撞测试的目的用于评定运输包装件在运输过程当中承受屡次重复性机械碰撞的耐冲击强度及包装对内装物的保护能力。说简单点就是为了测试汽车在碰撞的时候锁所产生的自身损伤、对车内人员及车外人员、物品等的损伤状况。
在进行汽车的碰撞测试时,固然不能让真人来进行测试,通常采用假人来测试。可是为了保证测试的真实性及可靠性,假人的生物力学性能应该和人体同样——好比身体各部分的大小和质量,以及关节的刚性等等,只有这样使用它们的模拟才能和现实相匹配。为了保证覆盖到的状况够全面,通常都会使用各类不一样的假人,不一样的假人模拟男性或者女性的身体,以及不一样身高和年龄的人体。web
想一想软件测试,其实和汽车的碰撞测试流程差很少。一个软件在发布上线以前都要通过各类测试,并产出测试报告,更严格的一点的要保证单测覆盖率不能低于某个值。和汽车碰撞测试相似,咱们在软件测试中也会用到不少“假人”。用这些“假人”的目的也是为了保证测试有效的进行。markdown
why网络
不知道你在平常开发中有没有遇到过如下问题或需求:框架
一、和别人一块儿作同一个项目,相互之间已经约定好接口。而后你开始开发,开发完本身的代码后,你想测试下你的服务实现逻辑是否正确。可是由于你依赖的只是接口,真正的服务还有开发出来。ide
二、仍是和上面相似的场景,你要依赖的服务是经过RPC的方式调用的,而外部服务的稳定性很难保证。性能
三、对于一个接口或者方法,你但愿测试其各类不一样状况,可是依赖的服务的执行策略及返回值你没办法决定。单元测试
四、你依赖的服务或者对象很难建立!(好比具体的web容器)测试
五、依赖的对象的某些行为很难触发!(好比网络异常)调试
六、以上问题你都没有,可是你要用的那个服务他处理速度实在是太慢了。对象
上面这些状况都是平常开发测试过程当中可能遇到的比较麻烦的问题。这些问题都会大大的提升测试成本。能够说,不少开发人员不肯意写单元测试很大程度上都和以上这六点有关系。
幸运的是,Mock对象能够解决以上问题。使用mock对象进行的测试就是mock测试。
what
mock测试就是在测试过程当中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来建立以便测试的测试方法。
mock对象,就是非真实对象,是模拟出来的一个对象。能够理解为汽车碰撞测试的那个假人。mock对象就是真实对象在调试期间的代替品。
你建立这样一个“假人”的成本比较低,这个“假人”能够按照你设定的“剧情”来运行。
在Java的单元测试中,不少Mock框架可使用,用的比较多的有easymock、mockito、powermock、jmockit等。
面向对象开发中,咱们一般定义一个接口,使用一个接口来描述这个对象。在被测试代码中只是经过接口来引用对象,因此它不知道这个引用的对象是真实对象,仍是mock对象。
好了,这篇文章的内容差很少就这些了,主要是让你们知道,在Java中可使用mock对象来模拟真实对象来进行单元测试,好处不少。下一篇会详细介绍如何使用mockito框架进行单元测试。
相关推荐
单元测试第一弹——从软件开发生命周期谈单元测试
单元测试第二弹——单元测试与单元测试框架
单元测试第三弹——使用JUnit进行单元测试