Ich versuche, ein Verfahren zur Herstellung EntityPersistorMockito Mock Methode mit Parametern vergleichen - Misplaced Argument Matcher hier erkannt
T getSingleResultFromTypedQuery(String queryString, Map<String, Object> params);
ich überprüfen möchten zu verspotten, wenn querystring eine bestimmte querystring übereinstimmt und wenn params einen bestimmten Wert enthält. Wenn diese beiden Bedingungen zutreffen, möchte ich ein spezifisches Objekt xy zurückgeben.
Ich bin neu zu Spott und Mockito, aber ich habe versucht, dies mit zwei ArgumentMatcher innerhalb der When() -Aufruf zu erreichen.
EntityPersistor<UserEntity> entityPersistorMocked = mock(EntityPersistorStub.class);
when(entityPersistorMocked.getSingleResultFromTypedQuery(argThat(new ArgumentMatcher<String>() {
@Override
public boolean matches(Object o) {
return "SELECT u FROM UserEntity u where u.username = :u".equals(o.toString());
}
}), argThat(new ArgumentMatcher<Map<String, Object>>() {
@Override
public boolean matches(Object o) {
HashMap<String, Object> params = (HashMap<String, Object>) o;
if (params.containsKey('u') && params.get('u').toString().equals("hans")) {
return true;
} else {
return false;
}
}
})))
.thenAnswer(new Answer<UserEntity>() {
@Override
public UserEntity answer(InvocationOnMock invocation) throws Throwable {
UserEntity user = new UserEntity();
user.setUserId(1);
user.setDisplayName("Dummy User");
user.setUsername("hans");
user.setPassword("pass");
return user;
}
});
kompiliert erfolgreich, aber nicht ausgeführt werden:
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Misplaced Argument Matcher hier entdeckt:
wie kann ich das Problem lösen? Oder gibt es einen besseren Weg, eine Methode zu verspotten und einen spezifischen Return-Case zu definieren (wenn param 1 eq x und param 2 eq y)?