2010-10-05 15 views
0

J'ai utilisé le code de this blog pour injecter des mockito Mock dans mes tests unitaires. Cependant, avant que le simulacre soit autowired il est enveloppé par Spring dans un proxy JDK. Cela provoque toute vérification (autowiredMock) pour lancer "Argument transmis à verify() n'est pas un simulacre!". L'exception est levée lorsque Mockito vérifie que l'argument passé à vérifier (..) est un objet fictif Mockito valide dans cette méthode:Mockito se moque de Spring: "L'argument transmis à verify() n'est pas un faux!"

private static Method getCallbacksSetter(Class type, String methodName) throws NoSuchMethodException { 
    return type.getDeclaredMethod(methodName, new Class[]{ Callback[].class }); 
} 

Ma question est de savoir comment dire Spring pas aux haricots simulacres proxy Mockito que je inscrire dans le BeanFactoryPostProcessor? Veuillez noter que je voudrais éviter de définir proxy-target-class = "true".

Merci

+0

Eh bien 'proxy-target-class' est la seule façon de le faire - pourquoi voulez-vous l'éviter? – skaffman

+0

Parce que CJLIB exige que les classes d'implémentation d'interface aient des constructeurs non-arg accessibles et que la plupart de mes classes aient des constructeurs privés sans-arg ou multi-arguments autowired. – alecswan

Répondre

0

Si vous autowire la maquette dans une méthode setter, vous pouvez déballer manuellement là.

@Autowired public setMockedService(MyServiceInterface service) { 
    mockedService = unwrapped(service) // to implement unwrapped(), you might use AOPUtils 
} 

Il est laid, mais il est un moyen de sortir sans proxy-target-class

Sur une note de côté, si moqueur vous donne autant la douleur, vous ne devriez pas être à la recherche à une solution de bout?

0

La dernière version de Mockito (actuellement 1.9.0) a résolu ce problème en changeant l'algorithme qui détecte si un objet est un faux ou non.