Quand je teste cette méthode statique
public class SomeClass {
public static long someMethod(Map map, String string, Long l, Log log) {
...
}
}
avec
import org.apache.commons.logging.Log;
@RunWith(PowerMockRunner.class)
//@PrepareForTest(SomeClass.class)
public class Tests {
@Test
public void test() {
...
PowerMockito.mockStatic(SomeClass.class);
Mockito.when(SomeClass.someMethod(anyMap(), anyString(), anyLong(), isA(Log.class))).thenReturn(1L);
...
}
}
J'ai InvalidUseOfMatchersException
. Mes questions sont les suivantes :
- Pourquoi ai-je obtenu cette exception alors que tous les arguments utilisent des matchers ? Comment la résoudre ? Je l'ai débogué, j'ai trouvé le
isA(Log.class)
renvoie un résultat nul. - Lorsque j'ajoute le
@PrepareForTest
à la classe de test et exécuter le test, le junit ne répond pas. Pourquoi ?
EDIT
J'ai essayé de ne pas utiliser les comparateurs d'arguments, et j'ai obtenu
org.mockito.exceptions.misusing.MissingMethodInvocationException : when() requiert un argument qui doit être 'un appel de méthode sur un mock'. Par exemple when(mock.getArticles()).thenReturn(articles) ;
De plus, cette erreur peut apparaître parce que :
vous bloquez l'une des méthodes suivantes : final/private/equals()/hashCode(). Ces méthodes ne peut pas être stubé/vérifié.
dans when() vous n'appelez pas la méthode sur mock mais sur un autre objet.
à ...
Il semble donc qu'en raison de la someMethod
même. Il existe synchronisé dans la méthode. Je me demande si Powermockito peut simuler ce genre de méthode ou non.