gpt4 book ai didi

elasticsearch - 任何 java.lang.NullPointerException 时的 Mockito

转载 作者:行者123 更新时间:2023-12-03 01:20:34 25 4
gpt4 key购买 nike

我有这个必须测试的方法:

    private void processRequest() {
BulkRequest request = new BulkRequest();
request.add(new IndexRequest("posts").id("1")
.source(XContentType.JSON,"field", "foo"));
request.add(new IndexRequest("posts").id("2")
.source(XContentType.JSON,"field", "bar"));
final BulkResponse bulkResponse = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
}

这就是我试图从我的测试课上做的事情:
    RestHighLevelClient restHighLevelClientMock = mock(RestHighLevelClient.class);

final String errorMessage = "error message";
final Exception cause = new Exception("test exception");
final boolean isFailed = true;
final int itemID = 0;
// define the item failure
BulkItemResponse.Failure failure = mock(BulkItemResponse.Failure.class);
when(failure.getCause()).thenReturn(cause);
when(failure.getMessage()).thenReturn(errorMessage);
// define the item level response
BulkItemResponse itemResponse = mock(BulkItemResponse.class);
when(itemResponse.isFailed()).thenReturn(isFailed);
when(itemResponse.getItemId()).thenReturn(itemID);
when(itemResponse.getFailure()).thenReturn(failure);
when(itemResponse.getFailureMessage()).thenReturn("error message");
List<BulkItemResponse> itemsResponses = Collections.singletonList(itemResponse);
// define the bulk response to indicate failure
BulkResponse response = mock(BulkResponse.class);
when(response.iterator()).thenReturn(itemsResponses.iterator());
when(response.hasFailures()).thenReturn(isFailed);
// have the client return the mock response
when(restHighLevelClientMock.bulk(any(BulkRequest.class), RequestOptions.DEFAULT)).thenReturn(response);

我收到 java.lang.NullPointerException 在这一行:
when(restHighLevelClientMock.bulk(any(BulkRequest.class), RequestOptions.DEFAULT)).thenReturn(response);

知道为什么会这样吗?谢谢

最佳答案

我也遇到了这个问题,这导致我提出了这个 github 请求:
https://github.com/elastic/elasticsearch/issues/40534
Elasticsearc 的 RestHighLevelClient 类将许多公共(public)方法标记为 final方法,使其无法模拟。
github页面中详细介绍了有关创建委托(delegate)的解决方法,虽然不太理想,但有效。
编辑:在挖掘了可能的解决方案后,我发现了这篇文章:见 https://www.baeldung.com/mockito-final .我在自己的项目中进行了尝试,并让我的测试与 junit jupiter 一起工作。
将以下内容添加到您的 src/test/resources 文件夹中:

mockito-extensions/org.mockito.plugins.MockMaker
将以下行添加到 org.mockito.plugins.MockMaker 文件:
mock-maker-inline

关于elasticsearch - 任何 java.lang.NullPointerException 时的 Mockito,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60402183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com