## 事象 [[mockito]]で以下のように`A.B`ではなく`A.B.C`のような振る舞いを指定しようとすると、`NullPointerException`になる。 ```java HttpClient httpClientMock = mock(HttpClient.class); when(httpClientMock.send(any(HttpRequest.class), any(HttpResponse.BodyHandler.class)).body()) .thenReturn("{\"items\": [{\"name\": \"hogehoge\"}]}"); ``` エラーは以下のような感じ。 ``` Cannot invoke "java.net.http.HttpResponse.body()" because the return value of "java.net.http.HttpClient.send(java.net.http.HttpRequest, java.net.http.HttpResponse$BodyHandler)" is null java.lang.NullPointerException: Cannot invoke "java.net.http.HttpResponse.body()" because the return value of "java.net.http.HttpClient.send(java.net.http.HttpRequest, java.net.http.HttpResponse$BodyHandler)" is null ``` ## 原因 モック `A` に対して、`A.B`は振る舞いを指定しないとNullになるため、`A.B.C`が`NullPointerException`になるから。 ## 解決方法 mockの第2引数に`Answers.RETURNS_DEEP_STUBS`を指定する。 ## 参考 - [Mockito \(Mockito 5\.2\.0 API\)](https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#better_generic_support_with_deep_stubs)