spring中使用mockito

1 mockito介绍和入门

官方:https://github.com/mockito/mockito

入门:

5分钟了解Mockito http://liuzhijun.iteye.com/blog/1512780

Mockito:一个强大的用于 Java 开发的模拟测试框架 http://www.oschina.net/translate/mockito-a-great-mock-framework-for-java-development

2 spring中正常使用mockito

上demo代码:

正常使用spring和mockito中,我们把需要的mock的ApiService给mock掉,但是我们更想的是把TestApiService中的connect方法mock掉,这样就可以测试我们自己的代码,也就是ApiService中test方法自己的业务。

3 spring中mock任何容器内对象

上面的demo中,我们如何mock掉TestApiService中的test方法?

因为TestApiService是spring容器管理的bean,并且ApiService中使用到TestApiService,所以我们把ApiService中引用的TestApiService替换成我们的mock对象即可。

Spring框架有个反射工具ReflectionTestUtils,可以把一个对象中属性设置为新值,我们可以使用:

ReflectionTestUtils.setField(apiService, “testApiService”, spyTestApiService);

把我们mock的testApiService放到apiService中,这样apiService调用就是我们mock的对象了;但是默认spring中apiService对象是代理对象,不能直接把值设置到属性上,所以我们自己写个小的工具类,在最后如下:

ReflectionTestUtils.setField(AopTargetUtils.getTarget(apiService), “testApiService”, spyTestApiService);

完整demo:

最后就是注意测试之后要还原现场,把spring对象还原,尤其在跑maven test的时候,否则可能会影响其他人的测试。

Original: https://www.cnblogs.com/syxchina/p/4150879.html
Author: BuildNewApp
Title: spring中使用mockito

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/541630/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • JAVA中 @Override 的作用

    编译器可以检测出这种写法是错误的 这样能保证你的确重写的方法正确 而如果不加@Override public String tostring(){…}这样编译器是不会报…

    Java 2023年5月29日
    096
  • Linux下Oracle单实例配置多监听

    Oracle单实例配置多监听 一、前言 有时候我们项目中需要使用Oracle数据库,同时要需要不同的数据源,而Oracle不像Mysql那样直接建个库即可,Oracle是以账号为单…

    Java 2023年6月8日
    082
  • 线索二叉树相关问题

    线索二叉树相关问题 1.在先序线索二叉树中求解指针P的后继结点 binode presuc(Binode *p){ if(p->rtag==1) return p->r…

    Java 2023年6月8日
    069
  • IO(自定义异常类及测试)

    /* 异常注意事项:* A:子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。(父亲坏了,儿子不能比父亲更坏)* B:如果父类抛出了多个异常,子类重写父类时,只能抛…

    Java 2023年6月5日
    070
  • 【SpringCloud-Alibaba系列教程】2.搭建用户微服务模块

    本节是陆续搭建系统和编码的开始,我们会优先完成一个基础工程的创建。一般在互联网企业这部分工作可能不需要反复处理,只需要在承接产品需要后使用脚手架或者直接复制以往工程就可以创建现有需…

    Java 2023年6月5日
    090
  • Mac VMWare NAT模式安装 CentOS 7-操作教程

    学习大数据离不开 Linux 系统,网络上大部分文章都是在 Windows 系统下使用 VMWare Workstation 安装 CentOS ,并使用 NAT 模式配置网络。本…

    Java 2023年6月16日
    094
  • MyBatis 获取参数值的两种方式

    MyBatis获取参数值的两种方式:${}和#{}${}的本质就是字符串拼接,#{}的本质就是占位符赋值${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值…

    Java 2023年6月7日
    071
  • 好物合集(2)

    Utools(超好用的插件软件) 是什么 uTools 是一个极简、插件化的现代桌面软件,通过自由选配丰富的插件,打造得心应手的工具集合。 通过快捷键(默认 alt + space…

    Java 2023年6月5日
    081
  • 长篇图解etcd核心应用场景及编码实战

    大家好啊,我是字母哥,今天写一篇关于etcd的文章,其实网上也有很多关于etcd的介绍, 我就简明扼要,总结提炼,期望大家通过这一篇文章掌握etcd的核心知识以及编码技能! 本文首…

    Java 2023年6月15日
    081
  • 长篇图解java反射机制及其应用场景

    一、什么是java反射? 在java的面向对象编程过程中,通常我们需要先知道一个Class类,然后 new 类名()方式来获取该类的对象…

    Java 2023年6月15日
    076
  • Spring 源码(11)Spring Bean 的创建过程(2)

    Spring Bean 的创建过程介绍了 FactoryBean 的创建方式,那么接下来介绍不是 FactoryBean的创建方式,在创建过程中,又会分为单例的Bean的创建,原型…

    Java 2023年6月14日
    079
  • Spring5新特性—Log4j2

    Spring5新特性—Log4j2 Spring5新特性—Log4j2 创建一个Maven项目,导入依赖 org.apache.logging.log4j log4j-core 2…

    Java 2023年6月5日
    074
  • 夜行静思湖

    独自走在暗黑的静思湖畔无比温馨的情人桥也显得孤单想从天幕找寻一丝的暖意却没有星星肯出来相伴 昏黄的路灯光默然照亮指引不了心的方向路的尽头黑暗向无尽处弥漫无际无涯 摧枯拉朽 好心的风…

    Java 2023年6月5日
    084
  • resultMap的用法以及关联结果集映射

    resultTyperesultType可以把查询结果封装到pojo类型中,但必须pojo类的属性名和查询到的数据库表的字段名一致。如果sql查询到的字段与pojo的属性名不一致,…

    Java 2023年6月5日
    083
  • 微服务监控中心springboot-admin 配置登录密码

    pom 加入 security 加入配置类 SecuritySecureConfig <span class="hljs-keyword">pack…

    Java 2023年6月8日
    0101
  • 使用springboot创建web项目,并使用外部Tomcat

    在springboot中默认使用的是嵌入式的servlet容器,我们可以不用引入外部Tomcat就可以运行程序。这样的嵌入式容器优点就是简单、便携,但是缺点也比较明显,比如他默认不…

    Java 2023年5月30日
    085
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球