java.lang.AssertionError: Inattendu appel de la méthode convertMessagesAsAppropriate(com.Response@1bb35b)
Besoin d'aide, c'est de décider quelle approche doit être pris à l'essai ci-dessous morceau de code
J'ai une méthode appelée
private messageDAOInf messageDAO;
public Response verifyUser(Request request) {
Response response = null;
if (someCondition) {
/* -----------Some processing here---------- */
} else {
response = constructResponse(errorCode, errorDesc);
}
//Do more processing with messages from response
response = messageDAOInf
.convertMessagesAsAppropriate(response);
return response;
}
Mon EasyMock code est ici
/** The message dao inf. */
private MessageDAOInf messageDAOInf;
private VerifyUserService verifyUserServiceI;
@Before
public void setUp() throws Exception {
messageDAOInf = EasyMock.createMock(MessageDAOInf.class);
verifyUserService = new VerifyUserService();
verifyUserService.setMessageDAOInf(messageDAOInf);
}
@Test
public void testErrorResponse() {
Request request = loadRequest();
Response response = constructErrorResponse();
EasyMock.expect(messageDAOInf.convertMessagesAsAppropriate(
response)).andReturn(response);
EasyMock.replay(messageDAOInf);
Response response2 = verifyUserService.verifyUser(request);
assertFailedResponse(response2);
}
La question est à partir de la ligne
response = constructResponse(errorCode, errorDesc);
il construit réponse d'erreur dans verifyUser méthode et le passe à
messageDAOInf.convertMessagesAsAppropriate()
Mais facile de se moquer, il passe quelques autre instance (se moquaient de l'un), et de là se trompe jamais avec l'erreur
java.lang.AssertionError: Inattendu appel de la méthode convertMessagesAsAppropriate(***Réponse@1bb35b***): convertMessagesAsAppropriate(***Réponse@1b5d2b2***)::: 1, effectif: 0 au org.easymock.interne.MockInvocationHandler.invoke(MockInvocationHandler.java:29) au org.easymock.interne.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:56)
Laissez-moi savoir ce que l'approche que je dois prendre.
Merci.
OriginalL'auteur Geeta Bapat | 2010-07-20
Vous devez vous connecter pour publier un commentaire.
Votre code initial s'attend à ce que
convertMessagesAsAppropriate
va être appelé avec l'exacte instance deResponse
que vous avez créé dans le test: évidemment, il ne va pas le faire.La correction que vous avez fait est essentiellement le même que l'aide de l'
EasyMock.anyObject()
méthode qui permettra à toutResponse
instance. Si vous voulez vérifier dans votre unité de test, c'est très bien. Alternativement, vous pouvez ajouter de la logique supplémentaire dans votreArgumentMatcher
de prouver que leResponse
qui est passée en argument est vraiment un ErrorResponse, ouCapture
la réponse et de l'examiner dans votre test. Tout cela dépend de votre niveau de test 🙂anyObject()
:EasyMock.anyObject(Response.class)
OriginalL'auteur DoctorRuss
J'ai trouvé moyen de le faire.
Vous devez implémenter l'interface org.easymock.IArgumentMatcher
}
et dans votre classe de test ajouter une méthode
Maintenant, en passant de easymock utiliser la méthode eqCriterion à la ligne
En court remplacer la ligne ci-dessus avec
De cette manière, il va utiliser ce moqué d'instance de réponse à la place de celui généré par le code réel.
OriginalL'auteur Geeta Bapat