如何使用Mockito模拟Java中的链式依赖项

时间:2018-01-12 12:16:03

标签: java mockito

我有A类,它依赖于B类.B类再次依赖C类。结构如下:

Class A(){
    @Autowired
    private B b;

    public void someMethod(){
        b.callAnotherMethodAndGetValue();
    }
}

Class B(){
    @Autowired
    private C c;

    public void callAnotherMethodAndGetValue(){
        c.callAnother();
    }
}

Class ATest(){
    @Spy
    private B b;

    public void someMethod(){
        // it goes into this method, and throws null pointer exception at
        // c.callAnother(); as c is null.
        b.callAnotherMethodAndGetValue();
    }
}

有什么方法可以让堆栈从测试用例流向c.callAnother。然后在b.callAnotherMethodAndGetValue();

时不做

1 个答案:

答案 0 :(得分:5)

你需要在b:

上模仿C:和间谍
@Mock
C c;

@InjectMocks
B b;
@Test
public void someMethod(){
  b.callAnotherMethodAndGetValue();
}

关闭,如果你使用构造函数注入,你会让生活更轻松!

  

我正在编写A类测试用例。对于A类内部测试,我应该做@InjectMocks A a并且应该做a.someMethod() - Jyoti Yadav

然后测试应该是这样的:

@Mock
B b;

@InjectMocks
A a;

@Test
public void someMethod(){
  a.someMethod();
}