UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Mockito】RestHighLevelClientのモック化

JavaのElasticsearchクライアントライブラリRestHighLevelClientMockitoでモック化したかったが単純ではなかった

通常、Mockitoでモックする場合は以下のようにするだけ

RestHighLevelClient esClient = mock(RestHighLevelClient.class);
when(esClient.msearch(any(), eq(RequestOptions.DEFAULT))).thenReturn(multiSearchResponse);

しかし、これだとなぜかesClient.msearchがモック化されずに実行され、処理中にヌルポが発生してしまう

メソッドがモック化されていないような挙動

原因は以下によると、どうやらmsearchがfinalメソッドであり、Mockitoでfinalメソッドをモック化するには特殊な設定が必要とのこと

github.com

特殊な設定については以下に書かれていた

www.baeldung.com

  1. src/test/resources/mockito-extensions ディレクトリをつくる
  2. その中に org.mockito.plugins.MockMaker ファイルをつくる
  3. そのファイルの中に一行 mock-maker-inline と記載する

これでfinalメソッドをモック化することができる

javadocも見つけた

javadoc.io