2017-10-20 53 views
1

J'essaye de se moquer de jdbcTemplate pour lancer une exception.mockito sur jdbcTemplate jetant l'erreur de compilation

Je suis en train de jeter exception sur cette méthode sur JdbcTemplate

<T> List<T> query(String sql, Object[] args, RowMapper<T> rowMapper)

Voici ce que j'ai

@MockBean 
JdbcTemplate jdbcTemplate; 

Mockito.doThrow(exception).when(jdbcTemplate.query(anyString(), anyList(), any(MyMapper.class))); 

J'obtiens l'erreur de compilation, cannot resolve method. J'ai également essayé

Mockito.doThrow(exception).when(jdbcTemplate.query(anyString(), anyList(), Matchers.<RowMapper<MyMapper>>any())); 

mais toujours obtenir la même erreur.

Quelle est la bonne façon de le faire ici?

EDIT

Comme suggéré dans l'une des réponses, j'ai essayé

Mockito.doThrow(exception).when(jdbcTemplate).query(anyString(), anyList(), any(MyMapper.class)); 

Je reçois encore cannot resolve the method erreur.

Répondre

0

Essayez:

Mockito.doThrow(exception).when(jdbcTemplate).query(anyString(), anyList(), any(MyMapper.class)); 

L'appel when() est d'envelopper votre maquette; vous n'appelez pas votre méthode dans le when() appelez-le après cet emballage pour indiquer à Mockito ce que vous attendez de lui.

+1

Veuillez fournir des détails sur les raisons pour lesquelles cela fonctionnerait. – mega6382

+0

Cela n'a pas fonctionné non plus. Je reçois toujours "ne peut pas résoudre la méthode" –

+0

Avez-vous débogué et assuré que votre jdbcTempalte est en effet bien rempli avec un simulacre? – dillius

5

Les appels suivants compilerons:

Mockito.doThrow(exception).when(jdbcTemplate).query(
    Mockito.anyString(), 
    Mockito.any(Object[].class), 
    Mockito.any(MyMapper.class) 
); 

Mockito.doThrow(exception).when(jdbcTemplate).query(
    Mockito.anyString(), 
    Mockito.any(Object[].class), 
    ArgumentMatchers.<RowMapper<MyMapper>>any()) 
); 

La différence essentielle entre ces derniers et ce que vous aviez essayé est déjà le deuxième argument. Dans cette méthode:

<T> List<T> query(String sql, Object[] args, RowMapper<T> rowMapper) throws DataAccessException; 

... le second argument est:

Object[] args 

On dirait que vous avec pour cette anyList() qui retourne List<T>. Puisque ce paramètre est de type Object[], il doit correspondre à quelque chose qui renvoie un Object[]. Par exemple:

Mockito.any(Object[].class)