【发布时间】:2014-09-23 07:51:33
【问题描述】:
我有以下代码:
handler = NodeHandler.getINodeHandler(localZone).getITspPlatformHandler().getITspProcessorManagementHandler();
我是这样嘲笑的:
mockStatic(NodeHandler.class);
INodeHandler iNodeHandler = mock(INodeHandler.class,Mockito.RETURNS_DEEP_STUBS);
when(NodeHandler.getINodeHandler(localZone)).thenReturn(iNodeHandler);
ITspProcessorManagementHandler iTspProcessorManagementHandler =mock(ITspProcessorManagementHandler.class,Mockito.RETURNS_DEEP_STUBS);
when(iNodeHandler.getITspPlatformHandler().getITspProcessorManagementHandler()).thenReturn(iTspProcessorManagementHandler);
几行代码后,另一个链式方法调用来了:
ITspTrafficProcessor processor = NodeHandler.getINodeHandler(localZone, localUI).getITspPlatformHandler().getITspProcessorManagementHandler()
.getITspProcessorHandler(procs[i]).getITspTrafficProcessorHandler(0).getAttributes();
我是这样嘲笑的:
when(NodeHandler.getINodeHandler(localZone,UI.CORBA)).thenReturn(iNodeHandler);
when(iNodeHandler.getITspPlatformHandler().getITspProcessorManagementHandler()(+1+).getITspProcessorHandler(anyString())
.getITspTrafficProcessorHandler(anyInt()).getAttributes()).thenReturn(null);
所以我的问题是,我找不到比这更好的解决方案,因为问题是如果我告诉 mockito 返回 null 给处理程序而不是 iTspProcessorManagementHandler 然后我在 (+1+) 处得到一个 nullpointer 异常,但如果我对我的代码进行以下更改:
INodeHandler iNodeHandler = mock(INodeHandler.class,Mockito.RETURNS_MOCKS);
mockito 模拟出每个方法调用,而我的 when-thenReturn 语句不返回我想要的内容,例如 null。那么有什么建议可以做一个更好的解决方案吗????
【问题讨论】: