Java 莫基托·多雷图恩没有';在MVC中使用singleton返回模拟接口
我有A.class要测试:Java 莫基托·多雷图恩没有';在MVC中使用singleton返回模拟接口,java,mockito,Java,Mockito,我有A.class要测试: private void register(...) { ... abcInterface abc = ControllerFactory.getABCController().getABCInterface(); //returns real interface instead of mock Call<SOMECLAS
private void register(...) {
...
abcInterface abc = ControllerFactory.getABCController().getABCInterface(); //returns real interface instead of mock
Call<SOMECLASS> call = abc.subscribe(...);
Response<SOMECLASS> response = call.execute();
...
}
问题是
ControllerFactory.getABCController().getABCInterface()
返回真实的接口而不是模拟。看起来您忘记模拟getABCController
方法,该方法应返回AbcController模拟
,但getABCController
返回AbcController
的“真实”实例,然后返回“真实”实例AbcInterface
的实例
因此,要么模拟getABCController
,要么为a
创建一个接受AbcController的构造函数,然后在创建a
的实例时将模拟传递到该构造函数中;但它在Mockito.doReturn(dmsideface).when(dmsControllerMock.getdmsideface())上抛出UnfinishedStubbingException;
@RunWith(MockitoJUnitRunner.Silent.class)
public class ATest {
@Mock
AbcInterface AbcInterface;
@Mock
Call<SOMECLASS> request;
@Mock
ControllerFactory controllerFactory;
@Mock
AbcController abcControllerMock;
@Before
public void setup() {
ControllerFactory.createAbcController(); //always single instance is instantiated
}
@Test
public void registerTest() {
Mockito.doReturn(dmsControllerMock).when(controllerFactory).getDmsController();
Mockito.doReturn(abcInterface).when(abcControllerMock).getAbcInterface();
SOMECLASS response = ...
Response<SOMECLASS> response = Response.success(200, response);
Mockito.doReturn(request).when(abcInterface).subscribe(Mockito.any());
Mockito.when(request.execute()).thenReturn(response);
A a = new A(...);
a.register(...);
}
}