Mock入门+实践2015.1目录具体如何使用mock?Mock到底是什么?为什么需要用mock?Why?对象信息难构建(如HttpservletRequet、JDBC对象等)1依赖的接口尚未开发完成2异常场景(连接异常、超时异常等)3更多场景…..4What?MOCKmock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。Mock方法是单元测试中常见的一种技术,它的主要作用是模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与测试边界以外的对象隔离开。mock对象有助于从测试中消除依赖项,使测试更单元化。How?1手动构造mock对象可以自己写某个接口方法的实现,根据需要编写返回值,测试代码中使用该实现类对象缺点:会增加代码量,在写mock对象代码时,有可能引入错误。12开源项目构造mock方法有许多开源项目对动态构建Mock对象提供了支持,这些项目能够根据现有的接口或类动态生成;优点:这样不仅能避免额外的编码工作,同时也降低了引入错误的可能。目前,在Java阵营中主要的Mock测试工具有JMock,MockCreator,Mockrunner,EasyMock,MockMaker等等。Easymock工具介绍EasyMock是一套用于通过简单的方法对于给定的接口生成Mock对象的类库。它提供对接口的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以令Mock对象返回指定的值或抛出指定异常。通过EasyMock,我们可以方便的构造Mock对象从而使单元测试顺利进行。easymock使用准备下载所需的jar包,在maven的pom.xml加入依赖!--easymock--dependencygroupIdorg.easymock/groupIdartifactIdeasymock/artifactIdversion3.0/versionscopetest/scope/dependencyEasymock使用步骤1、使用EasyMock生成Mock对象;方式一:UserInfoExportServiceuserInfoExportService=EasyMock.createMock(UserInfoExportService.class);方式二:测试用例中使用多个Mock对象,可以使用如下方式IMocksControlcontrol=EasyMock.createControl();UserInfoExportServiceuserInfoExportService=createMock(UserInfoExportService.class);2、设定Mock对象的预期行为和输出;EasyMock.expect(userInfoExportService.checkPinExist(pin)).andThrow(newUserSdkExportException());3、将Mock对象切换到Replay状态(保存被mock的对象);EasyMock.replay(userInfoExportService);4、调用Mock对象方法进行单元测试;intacutal=userServiceImpl.checkPinExist(pin);assertEquals(3,acutal);5、对Mock对象的行为进行验证(在被mock的对象被应用之后,最好验证一下我们所设置的mock对象是不是按我们预期运行)EasyMock.verify(userInfoExportService);扩展-powermockpowermock这个工具是在EasyMock和Mockito上扩展出来的,目的是为了解决EasyMock和Mockito不能解决的问题,比如对static,final,private方法均不能mock。目前PowerMock仅扩展了EasyMock和mockito,需要和EasyMock或Mockito配合一起使用。PowerMock有两个重要的注解:在任何需要用到PowerMock的类开始之前,首先我们要做如下声明:@RunWith(PowerMockRunner.class)然后,还需要用注释的形式将需要测试的静态方法提供给PowerMock:@PrepareForTest({YourClassWithEgStaticMethod.class})谢谢!