我对使用模拟进行单元测试非常陌生。
因此,我有一个Java方法来构建搜索请求并调用elasticsearch进行搜索。我不确定如何对该方法进行单元测试。在下面的代码中,我应该模拟“ client.search()”吗?我认为我不应该这样做,因为client.search()的结果取决于我的代码(我为其提供的参数)。所以,我不应该模拟client.search()的输出,对吧?
我应该如何进行方法的单元测试?任何提示将不胜感激。谢谢。
public SearchResponse doV1Search(SearchRequestV1 searchRequestBody) throws IOException {
Date startDate = Date.from(searchRequestBody.getRange().getStartTime());
Date endDate = Date.from(searchRequestBody.getRange().getEndTime());
int size = ELASTICSEARCH_MAX_RECORDS_PER_RESPONSE;
int from = 0;
if (searchRequestBody.getMeta() != null) {
if (searchRequestBody.getMeta().getSize() != null
&& searchRequestBody.getMeta().getSize() != 0
&& searchRequestBody.getMeta().getSize() <= ELASTICSEARCH_MAX_RECORDS_PER_RESPONSE) {
size = Math.toIntExact(searchRequestBody.getMeta().getSize());
}
if (searchRequestBody.getMeta().getFrom() != null) {
from = Math.toIntExact(searchRequestBody.getMeta().getFrom());
}
}
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.from(from);
searchSourceBuilder.size(size);
searchSourceBuilder.sort(new FieldSortBuilder("creationTimestamp").order(SortOrder.DESC));
searchSourceBuilder.query(
buildQuery(
startDate,
endDate,
ModelMappings.convertV1SearchRequestFieldsToV3(searchRequestBody.getFields())
)
);
SearchRequest searchRequest = new SearchRequest(buildValidIndicesFromDateRange(startDate, endDate));
searchRequest.indicesOptions(IndicesOptions.LENIENT_EXPAND_OPEN);
searchRequest.source(searchSourceBuilder);
return client.search(searchRequest, RequestOptions.DEFAULT);
}