2014-03-04 6 views
7

Meine Methode in den Service und die Testklasse:org.mockito.exceptions.misusing.InvalidUseOfMatchersException:

public void updateSubModuleOrder(Long[] data, Long moduleSysId, Long userId) { 
    try { 
     for (int i = 0; i < data.length; i++) { 
      SubModule subModule=new SubModule(); 

      int temp = i + 1; 
      userSubmodule.setDsplySeq(temp); 
      userSubModuleDao.saveOrUpdate(userSubmodule); 
@Test 
public void testupdateSubModuleOrder(){ 
    UserModuleServiceImpl userModuleServiceImpl = new UserModuleServiceImpl(); 
    UserSubModuleDao userSubModuleDao = mock(User//set the required param ,some code here// 
    UserSubModuleId userSubModuleId=new UserSubModuleId(); 
    //some code// 
    when(userSubModuleDao.findById((any(UserSubModuleId.class)),false)).thenReturn(userSubModule); 
    when(userSubModuleDao.saveOrUpdate(any(UserSubModule.class))).thenReturn(null); 
    userModuleServiceImpl.updateSubModuleOrder(data, moduleSysId, userId); 

};* 

die Fehler, die ich bekommen ist

FAILED: testupdateSubModuleOrder 
org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 
Invalid use of argument matchers! 
2 matchers expected, 1 recorded: 
-> at com.TestUserModuleServiceImpl.testupdateSubModuleOrder(TestUserModuleServiceImpl.java:267) 

Diese Ausnahme kann auftreten, wenn Matcher mit kombiniert werden Rohwerte:

Bei der Verwendung von Matchern müssen alle Argumente von Matching-Parametern zur Verfügung gestellt werden. Zum Beispiel:

//correct: 
someMethod(anyObject(), eq("String by matcher")); 

das Verfahren ist eine baseDao Methode, die mein dao erstreckt. Es ist kein endgültiges oder statisches, aber ich bekomme dieses Problem.

+1

Stellen Sie sicher, Sie haben ** alle ** Ihre Argumente Matcher verwenden ('anyXX' oder' eq'): 'userSubModuleDao.findById ((any (UserSubModuleId.class)), false)' sieht verdächtig –

+0

möglich Duplikat von [Mockito: InvalidUseOfMatchersException] (http://stackoverflow.com/questions/14845690/mockito-invaliduseofmatchersexception) – LisaMM

Antwort

22

entweder Sie haben keine Matcher zu spezifizieren oder alle die Argumente Matches brauchen. So folgt aus:

when(userSubModuleDao.findById((any(UserSubModuleId.class)),false)) 

sollte sein:

when(userSubModuleDao.findById(any(UserSubModuleId.class), eq(false))) 

(ich die redundanten Klammern aus dem ganzen any Anruf entfernt habe.)

Vom Matchers documentation:

Warnung:

Wenn Sie Argument-Matcher verwenden, müssen alle Argumente von Matcher bereitgestellt werden.

+0

danke es funktionierte ... – user2375298

+0

Wenn ich versuche, doRetrun() .when(), gibt es mir folgenden Fehler. TestUserModuleServiceImpl.testupdateSubModuleOrder (TestUserModuleServiceImpl.java:270) thenReturn() fehlt möglicherweise. Beispiele für korrektes Stubbing: when (mock.isOk()). ThenReturn (true); wenn (mock.isOk()). ThenThrow (Ausnahme); doThrow (Ausnahme) .when (mock) .someVoidMethod(); Hinweise: 1. fehlende thenReturn() 2. Sie versuchen, eine endgültige Methode stummel, du ungezogener Entwickler! Wie auch immer, ich hatte wieder auf die ursprüngliche Linie und es funktioniert jetzt. – user2375298