2017-03-07 123 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);