JavaのElasticsearchクライアントライブラリRestHighLevelClient
をMockito
でモック化したかったが単純ではなかった
通常、Mockitoでモックする場合は以下のようにするだけ
RestHighLevelClient esClient = mock(RestHighLevelClient.class);
when(esClient.msearch(any(), eq(RequestOptions.DEFAULT))).thenReturn(multiSearchResponse);
しかし、これだとなぜかesClient.msearch
がモック化されずに実行され、処理中にヌルポが発生してしまう
メソッドがモック化されていないような挙動
原因は以下によると、どうやらmsearch
がfinalメソッドであり、Mockitoでfinalメソッドをモック化するには特殊な設定が必要とのこと
特殊な設定については以下に書かれていた
- src/test/resources/mockito-extensions ディレクトリをつくる
- その中に org.mockito.plugins.MockMaker ファイルをつくる
- そのファイルの中に一行
mock-maker-inline
と記載する
これでfinalメソッドをモック化することができる
javadocも見つけた