Mock实战之spy+AopTestUtils注入

前言:
描述两种场景
场景一:类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工具


    org.springframework
    spring-test
    RELEASE
    test

类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注入)