美文网首页
Mock实战之spy+AopTestUtils注入

Mock实战之spy+AopTestUtils注入

作者: 程序员小白成长记 | 来源:发表于2020-12-28 02:57 被阅读0次

前言:
描述两种场景
场景一:类A有两个方法:funA和funB,funA调用funB,其中funA需要执行真正的方法,funB需要mock
场景二:类A被spy了,类B被mock了,类A依赖类B(即类B需要注入到类A),下面就写一下这两种场景的解决办法

场景一

解决思路:
1,类A classA = spy(new 类A)
2,doReturn(返回值).when(classA).funB(Mockito.anyObject());
3,classA.funA(参数)

场景二

解决思路:
1,类A classA = spy(new 类A)
2,类B classB = mock(类B.class)
3,类B注入到类A // 借助AopTestUtils

  1. 类A classAReal = AopTestUtils.getTargetObject(classA);
  2. ReflectionTestUtils.setField(classAReal, "classB",classB); //第二个参数为类B在类A中的属性名称
    4,mock B类返回
    doReturn(返回值).when(classB).funB(Matchers.anyObject());
    5,A类执行真正方法
    classA.funA(参数);

[注] 引入AopTestUtils工具

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>RELEASE</version>
    <scope>test</scope>
</dependency>
类A classAReal  = AopTestUtils.getTargetObject(classA);
ReflectionTestUtils.setField(classAReal, "classB",classB); //第二个参数为类B在类A中的属性名称

参考

【1】Mockito的使用(二)——@InjectMocks、@Spy、@Mock
【2】关于spring-test包中ReflectionTestUtils反射测试工具类对springframework中ReflectionUtils进行代码测试
【3】通过AopTestUtils对切面对象进行mock

相关文章

网友评论

      本文标题:Mock实战之spy+AopTestUtils注入

      本文链接:https://www.haomeiwen.com/subject/icxznktx.html