2017-10-19 16 views
0

J'essaye d'écrire des testcases pour une méthode que j'ai implémentée qui à son tour utilise un fournisseur de cache tiers. Le problème que je suis confronté est que le cache est asynchrone, ce qui rend assez difficile à tester puisque l'élément mis en cache ne sont pas instantanément dans le cache.Mock object pour exécuter une méthode void différente

Ma solution à ceci était juste de simuler le cache en utilisant PowerMockito. Je peux faire en sorte qu'il retourne toujours le même objet, mais de préférence je le veux pour mettre l'objet dans un HashMap sur le mettre et l'obtenir à partir de la même carte sur une opération get. L'opération get devrait être assez simple, quelque chose comme:

final Map<String, Object> cacheMap = new HashMap<>(); 
    Answer<Object> getFunction = invocation -> 
      cacheMap.get(invocation.getArgument(0)); 
    when(mockCache.get(any())).thenAnswer(getFunction); 

Mais je ne suis pas sûr de savoir comment se moquer d'un appel similaire pour la méthode void mockCache.put(any(), any()) Il atleast semble que si vous ne pouvez pas se moquer de fonctions vides à autre chose que appelant la vraie méthode ou ne rien faire.

Répondre

1

Je pense que vous cherchez à intercepter l'appel d'origine et à le réacheminer vers une autre implémentation. Jetez un oeil à this réponse pour une explication comment le faire.