我有以下代码:
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+),但如果我做以下更改我的代码:
INodeHandler iNodeHandler = mock(INodeHandler.class,Mockito.RETURNS_MOCKS);
然后mockito模拟出每个方法调用,我的when-thenReturn语句不返回我想要的东西,例如null。有什么更好的解决方案吗????
像这样混乱的嘲弄表明您可以改进抽象。我会考虑将特定的逻辑封装在一个helper接口/类中,或者将"trainwreck"返回的预期类型注入到方法/类中。