你知道如何物理地模擬Elasticsearch Java客戶端嗎?目前嘲笑Java中的下列要求:如何模擬Elasticsearch Java客戶端?
SearchResponse response = client.prepareSearch(index)
.setTypes(type)
.setFrom(0).setSize(MAX_SIZE)
.execute()
.actionGet();
SearchHit[] hits = response.getHits().getHits();
我嘲笑:
- client.prepareSearch
- SearchRequestBuilder:
- builder.execute
- builder.setSize
- builder.setFrom 個
- builder.setTypes
- SearchResponse:
- action.actionGet
- SearchResponse:
- response.getHits
- searchHits.getHits
所以我的測試看起來像:
SearchHit[] hits = ..........;
SearchHits searchHits = mock(SearchHits.class);
when(searchHits.getHits()).thenReturn(hits);
SearchResponse response = mock(SearchResponse.class);
when(response.getHits()).thenReturn(searchHits);
ListenableActionFuture<SearchResponse> action = mock(ListenableActionFuture.class);
when(action.actionGet()).thenReturn(response);
SearchRequestBuilder builder = mock(SearchRequestBuilder.class);
when(builder.setTypes(anyString())).thenReturn(builder);
when(builder.setFrom(anyInt())).thenReturn(builder);
when(builder.setSize(anyInt())).thenReturn(builder);
when(builder.execute()).thenReturn(action);
when(client.prepareSearch(index)).thenReturn(builder);
醜...... 所以我想已知如果有更多的「優雅的方式」來嘲笑這個代碼。
感謝
對於它的價值,我認爲你太低級了。你只應該測試**你的**代碼,而不是檢查Elasticsearch是否工作:假設它是。所以我想你有一個包裝所有這些代碼的方法:例如'public String [] search(searchParams ..){SearchResponse response = client.prepareSearch(index).. etc; SearchHit [] hits = response.getHits()。getHits();返回擊中; }'。你的測試應該嘲笑你的搜索方法,並返回不同輸入的模擬String []結果。 – 2015-03-31 13:10:05