如何返回SearchHits与SearchHits. gethits () (elasticsearch)用于测试目的?



标题中的问题不是很清楚,但我找不到更合适的标题。目前,我必须为spring服务(使用elasticsearch)编写测试(分支覆盖),方法如下:

public CarSearchResult findCarData(final String name, final CarType carType){
....  search  .....
return mapResponse(response);
}
private CarSearchResult mapResponse(final SearchResponse results) throws IOException {
final CarSearchResult answer = new CarSearchResult();
final List<Car> mappedCars = new LinkedList<>();
for (SearchHit searchHit : results.getHits()) { <--  how to enter for-loop for testcoverage
final CarObj carObj = map(searchHit);
mappedCars.add(carObj );
}
answer.setCarObj(mappedCars);
return answer;
}

mapResponse()获取搜索结果(doc)并对其进行进一步处理。

在我的测试类中,我有这样的东西:

@Mock private SearchResponse searchResponse;
// other Test cases for empty result worked because of this (case not entering the for loop)
when(searchResponse.getHits()).thenReturn(SearchHits.empty());

这个问题是由于分支覆盖,我想写一个测试,它涵盖了有命中的情况。但为此,我需要Searchhits (doc)。有没有人知道进入这个for循环的方法,以便分支覆盖可以实现?

我试图找到一种方法来返回搜索命中与当(searchResponse.getHits())。然后返回(???),但我不知道(或找不到)应该返回什么,以便我可以覆盖for循环。

您必须返回SearchHits的模拟,其中iterator()方法被模拟(因为这就是在for循环中的幕后调用):

@Mock SearchHits searchHits;
@Mock SearchHit searchHit;
when(searchHits.iterator()).thenReturn(singleton(searchHit).iterator());
when(searchHit.docId()).thenReturn(42);

注意,因为SearchHitsSearchHit都是最终类,您必须确保Mockito能够模拟最终类。

最新更新