首页 > 解决方案 > 使用 Mockito 以嵌套方式测试具有多个自动装配类的函数

问题描述

这里我要测试一下method1。我想使用@Mock@InjectMocks注释来实现它,但是使用class Bas mock,它会返回 NPE。

 class A {
     @Autowired
     private B b;

     public String method1()
       {
         return b.method2(); 
       }
     }

class B{
     @Autowired
     private C c;

    public String method2(){
       return C.method3();
     }
    }

测试类:

@InjectMocks
    A a;

    @Mock
    B b = new B();


    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void testMethod1() {

    String x=a.method1();
    assertEquals("value",x);
    }

标签: unit-testingtestingjunitmockingmockito

解决方案


使用@Mock注解时,不要手动实例化变量。

Mockito 会为你做这件事,否则你最终会得到普通实例而不是模拟:

@Mock
B b;

还要确保你以某种方式设置你的 mock 以期望一个特定的值:

doReturn(returnString).when(b).method2();

推荐阅读