Dies ist der Code meines Dienstes:Mocking Ausnahmen mit Mockito: Unerwarteter Ausnahmefehler
public class Service {
public Object serviceMethod() throws MyException {
@Autowired
Dao dao;
try {
return dao.dao_method();
} catch (ExceptionFromDaoMethod e) {
throw (new MyException());
}
}
}
ich einen einfachen Unit-Test schreiben will; dies ist mein Testfall:
@Mock
Dao dao;
@InjectMocks
Service service;
@Test(expected=MyException.class)
public void shouldReturnMyException throws MyException {
when(service.serviceMethod()).thenThrow(new MyException());
}
Dieser Test schlägt fehl, weil ich eine unerwartete Ausnahme haben:
die erwartete Ausnahme ist MyException aber war org.mockito.exception.base.MockitoException
Warum? Was ist die Lösung?
aktualisiert Dank @Maciej Kowalski habe ich festgestellt, dass ich den wenn Zustand im Vergleich zu einer realen Klasse und nicht im Vergleich zu einem einem verspottet verwendet wurde. Also habe ich die Annotation @Spy
zum Service im Unit Test hinzugefügt.
Der Code des neuen Tests ist:
@Mock
Dao dao;
@InjectMocks
@Spy
Service service;
@Before
MockitoAnnotations.initMocks(this);
@Test(expected=MyException.class)
public void shouldReturnMyException throws MyException {
doThrow(new MyException()).when(service.serviceMethod());
}
Aber jetzt habe ich dieses Problem:
die erwartete Ausnahme ist MyException aber war
Können Sie mich erklären, warum meine Lösung ist falsch? Außerdem ist es in Ihrer Lösung wann (service.serviceMethod()) oder wann (service) .serviceMethod()? – PenguinEngineer
Nun wird die unerwartete Ausnahme MyException erwartet, war aber –
PenguinEngineer
Sie haben versucht, eine Instanz zu verspotten, die kein Mock ist, oder als Spion, so dass dies keine Auswirkungen hat oder eine Mockito-Ausnahme auslösen wird. Und ja, wenn Sie sich über die Methode eines Spions lustig machen, den Sie benutzen .when (service) .serviceMethod(); ' Syntax. –