2017-03-07 95 views
0

我想嘲笑開玩笑的客戶,所以我可以測試如何嘲笑JestClient,elasticSearch

@Override 
public List<Person> findAll() { 
    SearchResult result = null; 
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); 
    searchSourceBuilder.query(QueryBuilders.matchAllQuery()); 
    Search search = new Search.Builder(searchSourceBuilder.toString()).addIndex(personIndexName) 
      .addType(personTypeName).build(); 
    try { 
     result = client.execute(search); 
     if (!result.isSucceeded()) { 
      return null; 
     } 

    } catch (IOException e) { 
     logger.error("The search can't be completed " + e.getMessage()); 
    } 
    List<SearchResult.Hit<Person, Void>> hits = result.getHits(Person.class); 
    return hits.stream().map(this::getPerson).collect(Collectors.toList()); 
} 

我要那麼它拋出IOException異常嘲笑開玩笑,做一些其他的測試,我試圖嘲弄這樣的:

 when(mockJestClient.execute(search)).thenThrow(IOException.class); 
    when(mockJestClient.execute(null)).thenThrow(IOException.class); 

    elasticsearchPersonRepository = new ElasticsearchPersonRepository(mockJestClient); 

無濟於事,當我打電話測試

@Test(expected = IOException.class) 
public void findAll() throws Exception { 

    elasticsearchPersonRepository.findAll(); 

} 

它拋出空指針異常而不是IOExcept。 我做錯了什麼?我如何模擬JestClient?

回答

1

您應該既不使用'search'也不使用'null',而使用特殊的'any'參數來執行。如果是Mockito(其他模擬框架具有相似的功能)

when(mockJestClient.execute(ArgumentMatchers.any(Search.class))).thenThrow(IOException.class);