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

Jyo*_*dav 1 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以让堆栈c.callAnother从Test Cases 流出来.没有做的时候b.callAnotherMethodAndGetValue();

Tim*_*kle 5

你需要模仿C:而不是窥探b:

@Mock
C c;

@InjectMocks
B b;
@Test
public void someMethod(){
  b.callAnotherMethodAndGetValue();
}
Run Code Online (Sandbox Code Playgroud)

因为你使用构造函数注入你会让你的生活更轻松!


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

那么测试看起来应该是这样的:

@Mock
B b;

@InjectMocks
A a;

@Test
public void someMethod(){
  a.someMethod();
}
Run Code Online (Sandbox Code Playgroud)