标题中的问题不是很清楚,但我找不到更合适的标题。目前,我必须为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);
注意,因为SearchHits
和SearchHit
都是最终类,您必须确保Mockito能够模拟最终类。