Aucun des exemples ci-dessus n'a fonctionné pour moi, car je dois simuler une méthode plusieurs fois pour différents paramètres de type de classe.
Au lieu de cela, cela fonctionne.
//Handle InstrumentType.class
Mockito.doReturn(new InstrumentTypeMapper() {
@Override
public InstrumentType map(String sourceType) throws Exception {
return InstrumentType.Unknown;
}
}).when(mappingLoader).load(any(ServiceCode.class), argThat(new ArgumentMatcher<Class<InstrumentType>>() {
@Override
public boolean matches(Class<InstrumentType> argument) {
return InstrumentType.class.isAssignableFrom(argument);
}
}));
//Handle InstrumentSubType.class
Mockito.doReturn(new InstrumentSubTypeMapper() {
@Override
public InstrumentSubType map(String sourceType) throws Exception {
return InstrumentSubType.istNone;
}
}).when(mappingLoader).load(any(ServiceCode.class), argThat(new ArgumentMatcher<Class<InstrumentSubType>>() {
@Override
public boolean matches(Class<InstrumentSubType> argument) {
return InstrumentSubType.class.isAssignableFrom(argument);
}
}));
Voici la version courte :
Mockito.doReturn(new InstrumentTypeMapper() {
@Override
public InstrumentType map(String sourceType) throws Exception {
return InstrumentType.Unknown;
}
}).when(mappingLoader).load(any(ServiceCode.class), argThat((ArgumentMatcher<Class<InstrumentType>>) InstrumentType.class::isAssignableFrom));
Mockito.doReturn(new InstrumentSubTypeMapper() {
@Override
public InstrumentSubType map(String sourceType) throws Exception {
return InstrumentSubType.istNone;
}
}).when(mappingLoader).load(any(ServiceCode.class), argThat((ArgumentMatcher<Class<InstrumentSubType>>) InstrumentSubType.class::isAssignableFrom));
Comme vous pouvez le voir, j'utilise un système personnalisé. ArgumentMatchers en même temps que argThat Je ne sais pas s'il existe un moyen plus court qui fonctionne également.
9 votes
Class<?>
incroyable !0 votes
Votre solution (Class<?>) any(Class.class) devrait être la réponse ici. Je préférerais de loin utiliser cette solution plutôt que la classe ClassOrSubclassMatcher vue ci-dessous.
0 votes
@superbAfterSemperPhi et johan-sjöberg J'ai posté une autre façon de faire cela, sans casting. Je pense que cela pourrait être une meilleure façon. Qu'en pensez-vous ?