2015-03-19 1 views
1

Je reçois l'exception suivanteorg.mockito.exceptions.misusing.InvalidUseOfMatchersException argument de Misplaced matcher

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 
Misplaced argument matcher detected here: 

You cannot use argument matchers outside of verification or stubbing. 
Examples of correct usage of argument matchers: 
    when(mock.get(anyInt())).thenReturn(null); 
    doThrow(new RuntimeException()).when(mock).someVoidMethod(anyObject()); 
    verify(mock).someMethod(contains("foo")) 

pour la ligne de code

@Mock  
Template templateParser = new TemplateParser(); 
when(templateParser.getLayoutIdsFromTemplate(any(HashMap.class))) 
          .thenReturn(Arrays.asList("id1", "id2")); 

La fonction que je suis moquais est comme ci-dessous

public class TemplateParser { 
    public List<String> getLayoutIdsFromTemplate(HashMap<String, Object> parsedTemplate) 
    { 
     List<String> listOfLayoutIds = new ArrayList<String>(); 

     //Loading listOfLayoutIds here 

     return listOfLayoutIds; 
    } 
} 

Quelqu'un peut-il me dire quel est le problème?

+0

Il semble que vous utilisiez incorrectement l'annotation '@ Mock'. Pouvez-vous montrer votre classe de test complète? (Ou une version représentative minimale)? –

Répondre

0

Votre méthode simulée getLayoutIdsFromTemplate reçoit un HashMap<String, Object> en tant que paramètre, pas un simple HashMap. C'est la cause de InvalidUseOfMatchersException.

Si vous pouvez faire un peu de refactoring, vous pouvez le résoudre à faire:

1) Changez votre méthode pour recevoir un Map<String, Object> plutôt un Hashmap<String, Object>:

public List<String> getLayoutIdsFromTemplate(Map<String, Object> parsedTemplate) { 
     ... 
    } 

2) Dans votre classe de test, correspondance le paramètre à l'aide Mockito.anyMapOf(String.class, Object.class)) au lieu de Mockito.any(HashMap.class)):

when(templateParser.getLayoutIdsFromTemplate(anyMapOf(String.class, Object.class))).thenReturn(Arrays.asList("id1", "id1")); 

Hope it helps.