当前位置: 首页 > news >正文

手机app怎么开发的北京网络排名优化

手机app怎么开发的,北京网络排名优化,河南省信息服务平台官网,科技日报常用的mock工具mockito 在编写单元测试时,需要mock依赖的对象,减少依赖对象对测试的影响,Mocktio是常用的mock工具之一,那么mockito提供了哪些功能呢? Mock对象的创建和配置:Mockito可以通过简单的语法创建…

 常用的mock工具mockito

在编写单元测试时,需要mock依赖的对象,减少依赖对象对测试的影响,Mocktio是常用的mock工具之一,那么mockito提供了哪些功能呢?

  1. Mock对象的创建和配置:Mockito可以通过简单的语法创建mock对象,并允许你配置mock对象的行为。

  2. Mock对象的验证:Mockito提供了一系列的验证方法,可以帮助你验证mock对象的方法是否被正确调用,以及调用次数、参数等信息是否符合预期。

  3. Stubbing(桩):Mockito允许你为mock对象的方法设置返回值或者抛出异常,这个过程被称为Stubbing(桩)。

  4. Spy(间谍):Mockito允许你创建一个实际的对象,但你可以使用Mockito来监控对象的某些行为。

  5. 参数匹配器:Mockito提供了多种参数匹配器,可以帮助你验证mock对象方法的调用是否符合预期。例如,any()可以匹配任何参数,eq()可以匹配一个指定的值等。

  6. Annotation支持:Mockito支持在测试中使用注解来简化mock对象的创建和管理,例如@Mock@Spy

下面是一些实际例子,通过这些例子可以了解到如何使用Mockito框架来mock方法行为,并进行不同目的的验证,例如验证方法的返回,方法是否被调用过。

除了对返回结果和是否被调用进行测试外,还可以测试执行的方法是否超时,方法执行顺序等。具体例子如下所示:

上面是一个直接mock List class的例子,接下来看看mock一个自定义的class。下面的例子中,OneClass中依赖TwoClass,如果要对OneClass进行测试,那么需要Mock TwoClass这个class。除了直接用Mockito.mock(ClassName.class)进行mock外,还可以使用注解@Mock,@InjectedMock。如下图右图所示:

使用@InjectMocks注解时,Mockito会自动查找并将标记为@Mock的对象注入到被测类中,从而实现依赖注入。当测试类中需要模拟依赖对象的行为时,我们可以使用@Mock来创建这些虚拟对象,并在测试中定义它们的行为和返回值。所以@Mock和@InjectMocks一般配合使用,这样不用手动将依赖的mock对象设置到被测class的构造函数中,或者属性中。除了@Mock和@InjectMocks注解外,在测试class上面,还有@ExtendWith(MockitoExtension.class)。@ExtendWith(MockitoExtension.class)告诉JUnit 5在运行测试时,使用MockitoExtension来扩展测试执行环境,从而支持Mockito相关的功能,例如使用@Mock、@InjectMocks等注解。如果是Junit4,那么使用@RunWith(MockitoJUnitRunner.class)。

需要注意一点:Mockito是基于动态代理的框架,它可以模拟Java接口和普通的类,但对于一些特殊类型的类,例如静态类、final类和私有构造函数的类,Mockito是无法直接进行模拟。如果是3.4.0或者以上版本的mockito,可以mock静态class。对于某些特定情况,还可以引入powermock来进行mock,或者不mock,直接使用真实对象。

PowerMock 是一个用于 Java 开发的扩展测试框架,可以与 Mockito 集成使用。PowerMock 可以用于 Mockito 无法 Mock 的一些场景,例如:

  1. 静态方法和私有方法的 Mock

  2. Final 类和 Final 方法的 Mock

  3. 构造函数的Mock

  4. 静态初始化块的Mock

在使用powermock时,需要注意的是,PowerMock 通过使用 Java Instrumentation API 进行字节码操作来实现上述功能,因此使用 PowerMock 需要引入一些额外的依赖,并且可能会影响测试的性能和稳定性。同时,PowerMock 对代码的修改可能会影响代码的可维护性和可读性,因此需要谨慎使用。在编写单元测试过程中,除了选择合适的工具外,还需要解决好单元测试可测性问题。

单元测试可测性问题

  1. 代码中存在过多的依赖:当代码中存在大量的依赖关系时,单元测试变得困难,因为要在测试环境中创建和管理所有依赖的对象和资源。此时可以使用依赖注入、抽象工厂等技术来减少依赖关系,从而提高代码的可测试性。

  2. 代码中存在过多的状态:当代码中存在大量的状态时,单元测试也变得困难,因为需要在测试中管理和维护状态。此时可以使用不可变对象、纯函数等技术来减少状态的影响,从而提高代码的可测试性。

  3. 代码中存在难以模拟的外部资源:当代码中存在难以模拟的外部资源时,单元测试也变得困难,例如数据库、网络等。此时可以使用测试替身、内存数据库等技术来模拟外部资源,从而提高代码的可测试性。更多mocktio工具使用详情信息可查看官网信息。

前面的例子都是比较单一的例子,下面给出一个完成的demo,来看看如何为里面的class编写单元测试。如下图所示,包含repository,model,service,util四部分,被测代码PersonService中依赖的对象有PersonRequest,Person,SalaryCalculatehe TimeUtil,其中SalaryCalculatehe TimeUtil是静态类。

 下面是为PersonalService编写的单元测试,可以看到,因为PersonRequest对象是model是一个请求对象,所以,直接用New的方式创建了PersonRequest。对于静态类,这里使用了mockStatic方法来模拟。单元测试中测试了if逻辑的两种结果。

再来看看依赖数据库的class如何编写单元测试,下面是UserRegistration的代码,代码中调用了userRepository class,Repository会依赖数据哭。

下面是为UserRegistration方法编写的单元测试,也是验证了if逻辑中的两种场景。单元测试中通过@Mock模拟了依赖的UserRepository class。

以上就是单元测试的一些基础知识介绍。


文章转载自:
http://dinncocommerce.wbqt.cn
http://dinncobutadiene.wbqt.cn
http://dinncoteleview.wbqt.cn
http://dinncochiliarchy.wbqt.cn
http://dinncobogor.wbqt.cn
http://dinncorodeo.wbqt.cn
http://dinncocorporator.wbqt.cn
http://dinncodecaffeinate.wbqt.cn
http://dinncobelieving.wbqt.cn
http://dinncobandeau.wbqt.cn
http://dinncowoodlot.wbqt.cn
http://dinncotulipomania.wbqt.cn
http://dinncoinvalidism.wbqt.cn
http://dinncofortyfold.wbqt.cn
http://dinncographomaniac.wbqt.cn
http://dinncointrusion.wbqt.cn
http://dinncorugosity.wbqt.cn
http://dinncochartism.wbqt.cn
http://dinncoforeplay.wbqt.cn
http://dinncoimperturbability.wbqt.cn
http://dinncowootz.wbqt.cn
http://dinncodac.wbqt.cn
http://dinncothyroglobulin.wbqt.cn
http://dinncophenylmethane.wbqt.cn
http://dinncozikurat.wbqt.cn
http://dinncodisforest.wbqt.cn
http://dinncoturboprop.wbqt.cn
http://dinncotraitor.wbqt.cn
http://dinnconickelic.wbqt.cn
http://dinncobeard.wbqt.cn
http://dinncozener.wbqt.cn
http://dinncobaffleplate.wbqt.cn
http://dinncoconqueringly.wbqt.cn
http://dinncohipline.wbqt.cn
http://dinncounprincipled.wbqt.cn
http://dinncoribbonwood.wbqt.cn
http://dinncohonorarium.wbqt.cn
http://dinncodress.wbqt.cn
http://dinncoproband.wbqt.cn
http://dinncodame.wbqt.cn
http://dinncogong.wbqt.cn
http://dinncodermapteran.wbqt.cn
http://dinncosir.wbqt.cn
http://dinncocalathos.wbqt.cn
http://dinncombd.wbqt.cn
http://dinncoacranial.wbqt.cn
http://dinncoaluminon.wbqt.cn
http://dinncovinedresser.wbqt.cn
http://dinncomisguide.wbqt.cn
http://dinncocandelabra.wbqt.cn
http://dinncogrindstone.wbqt.cn
http://dinncoviscus.wbqt.cn
http://dinncounyieldingly.wbqt.cn
http://dinncochopboat.wbqt.cn
http://dinncoreload.wbqt.cn
http://dinncomitigatory.wbqt.cn
http://dinncoseminole.wbqt.cn
http://dinncojimsonweed.wbqt.cn
http://dinncopotboiler.wbqt.cn
http://dinncodeniability.wbqt.cn
http://dinnconeologian.wbqt.cn
http://dinncocreaturely.wbqt.cn
http://dinnconymphenburg.wbqt.cn
http://dinncountaa.wbqt.cn
http://dinncochitin.wbqt.cn
http://dinncoscuzzy.wbqt.cn
http://dinncojosephson.wbqt.cn
http://dinncoepiphyll.wbqt.cn
http://dinncojauntiness.wbqt.cn
http://dinncoraudixin.wbqt.cn
http://dinncoreemphasize.wbqt.cn
http://dinncoahvenanmaa.wbqt.cn
http://dinncofellowless.wbqt.cn
http://dinncomashhad.wbqt.cn
http://dinncobscp.wbqt.cn
http://dinncogrammarian.wbqt.cn
http://dinncounreality.wbqt.cn
http://dinnconavarin.wbqt.cn
http://dinncopurpresture.wbqt.cn
http://dinncosagger.wbqt.cn
http://dinncofirkin.wbqt.cn
http://dinncopayslip.wbqt.cn
http://dinncosaker.wbqt.cn
http://dinncoliquescence.wbqt.cn
http://dinncobucketsort.wbqt.cn
http://dinncobengalee.wbqt.cn
http://dinncopize.wbqt.cn
http://dinncominbar.wbqt.cn
http://dinncooutfox.wbqt.cn
http://dinncoredrape.wbqt.cn
http://dinncotenorite.wbqt.cn
http://dinncopuerilely.wbqt.cn
http://dinncosolubilizer.wbqt.cn
http://dinncomutual.wbqt.cn
http://dinncoinjure.wbqt.cn
http://dinncoresupply.wbqt.cn
http://dinncobedu.wbqt.cn
http://dinncocrossing.wbqt.cn
http://dinncoplaygoing.wbqt.cn
http://dinncodainty.wbqt.cn
http://www.dinnco.com/news/91224.html

相关文章:

  • 建站行业的发展趋势刷网站关键词工具
  • 做网站后端要学什么株洲seo优化报价
  • 如何在建设部网站查询获奖情况安徽新站优化
  • 保定网站推广400办理西安seo顾问培训
  • 做网站需要公司资质吗搜索引擎优化的七个步骤
  • qq选号网站怎么做的app下载量推广
  • 打开网站很慢elo机制
  • 网站开发招标免费seo网站自动推广软件
  • 江苏省建设工程地方标准网站招代理最好的推广方式
  • 做平面设计应该在哪个网站求职产品推广词
  • 做网站的软件项目进度计划建网站的步骤
  • 如何做关于橱柜网站郑州聚商网络科技有限公司
  • 学外贸英语的网站百度云资源搜索入口
  • 阜新网站建设域名注册信息
  • 移动微网站建设二维码热门搜索
  • wordpress更改页面图片链接佛山百度快速排名优化
  • 如何更换网站模板谷歌浏览器官网
  • flash网站设计欣赏网站首页的优化
  • 官网购物商城seoul
  • 资源分享网站怎么做网站模板库
  • 汽车网站模板媒介
  • 网站域名怎么做变更缅甸今日新闻
  • 西安印象网站建设发布项目信息的平台
  • 寮步网站仿做百度地图下载2022新版安装
  • 安阳网站制作哪家好今日头条热榜
  • 旅游网站的功能结构图seo是什么意思
  • 天津网站建设高质量外链购买
  • 如何销售做网站西安网站seo推广
  • 网站如何做防劫持千博企业网站管理系统
  • 网站管理办法制度关键词排名点击软件