私は次のコードを持っています:
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にiTspProcessorManagementHandlerではなくハンドラーにnullを返すように指示すると、(+ 1 +)でnullpointer例外が発生するためですが、コードに次の変更を加えます。
INodeHandler iNodeHandler = mock(INodeHandler.class,Mockito.RETURNS_MOCKS);
mockitoはすべてのメソッド呼び出しをモックアウトし、when-thenReturnステートメントは必要なもの(たとえばnull)を返しません。それで、より良い解決策を行うためのアドバイスはありますか????
そのような乱雑なモックは、抽象化を改善できることを示しています。その特定のロジックをヘルパーインターフェイス/クラスにカプセル化するか、「trainwreck」によって返される期待される型をメソッド/クラスに注入することを検討します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加