У меня есть следующий код:
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, тогда я получаю исключение nullpointer в (+1+), но если я внесите следующие изменения в мой код:
INodeHandler iNodeHandler = mock(INodeHandler.class,Mockito.RETURNS_MOCKS);
Затем mockito высмеивает вызов каждого метода, а мои инструкции when-thenReturn не возвращают то, что я хочу, например, null. Так что любой совет, чтобы сделать лучшее решение????
Мессиальное издевательство над этим является признаком того, что вы можете улучшить абстракцию. Я бы рассмотрел инкапсуляцию этой конкретной логики в вспомогательный интерфейс/класс или для ввода ожидаемого типа, возвращаемого "trainwreck" в метод/класс.
when
и затемthenReturn
для каждого из вызовов.