当前位置: 首页 > 科技观察

单元测试的第四颗炸弹——使用Mock技术进行单元测试

时间:2023-03-17 11:40:51 科技观察

碰撞测试是汽车开发活动的重要组成部分。所有汽车在上市前都要进行碰撞测试,并公布测试结果。碰撞试验的目的是评价运输包装件在运输过程中承受反复机械冲击的抗冲击能力以及包装件对内装物的保护作用。简单点说就是测试汽车碰撞时,锁对自身造成的伤害,以及对车内外人员、物品等的伤害。在进行汽车的碰撞测试时,当然不能让真人测试,一般采用假人测试。但为保证试验的真实性和可靠性,假人的生物力学特性应与人体相同——如身体各部分的大小和质量、关节的刚度等,只有这样,使用它们的模拟才能符合现实。为了保证覆盖面足够全面,一般会使用各种假人,不同的假人模拟男性或女性的身体,以及不同身高和年龄的人体。想想软件测试,其实类似于汽车的碰撞测试过程。一款软件在上线之前,必须经过各种测试,并出具测试报告。更严格地说,需要保证单次测试覆盖率不能低于某个值。与车祸测试类似,我们在软件测试中也使用了大量的“假人”。使用这些“假人”的目的也是为了保证测试能够有效进行。为什么不知道大家在日常开发中有没有遇到过以下问题或者需求:1、和别人做同一个项目,接口已经约定好了。然后你开始开发,开发完自己的代码后,你要测试你的服务实现逻辑是否正确。但是因为你只依赖接口,真正的服务还有待开发。2、类似上述的场景,你要依赖的服务是通过RPC调用的,对外服务的稳定性很难保证。3、对于一个接口或者方法,你想测试各种情况,但是你没有办法决定依赖服务的执行策略和返回值。4.你依赖的服务或对象很难创建!(比如特定的web容器)5.依赖对象的一些行为很难触发!(比如网络异常)6.你没有以上问题,但是你想用他那个服务的处理速度实在是太慢了。以上几种情况都是日常开发测试过程中可能遇到的比较麻烦的问题。这些问题都会大大增加测试成本。可以说,很多开发者不愿意写单元测试,很大程度上与以上六点有关。幸运的是,Mock对象可以解决上述问题。使用模拟对象的测试是模拟测试。whatmock测试是一种测试方法,它使用虚拟对象为一些在测试过程中不易构造或获取的对象创建测试方法。模拟对象是非真实对象,模拟对象。可以理解为汽车碰撞试验的假人。模拟对象是调试期间真实对象的替代品。你创造这样一个“假人”的成本比较低,而且这个“假人”可以按照你设定的“剧情”运行。在Java单元测试中,可以使用很多Mock框架,比如easymock、mockito、powermock、jmockit等。在面向对象开发中,我们通常定义一个接口,用一个接口来描述对象。在测试代??码中,只是通过接口引用了对象,所以并不知道引用的对象是真实对象还是mock对象。好了,这篇文章的内容就说到这里,主要是让大家知道在Java中可以使用mock对象来模拟真实的对象进行单元测试,好处多多。下一篇文章将详细介绍如何使用mockito框架进行单元测试。【本文为专栏作家霍利斯原创文章,作者微信公众号Hollis(ID:hollishuang)】点此阅读更多本作者好文