2010-09-21 4 views
4

Si j'ai la méthode suivante:création d'objet Mock dans une méthode

public void handleUser(String user) { 

    User user = new User("Bob"); 
    Phone phone = userDao.getPhone(user); 
    //something else 
} 

Quand je teste cela avec des simulacres en utilisant EasyMock, est là, je pouvais tester quand même le paramètre User je passe dans ma maquette de UserDao comme ceci:

User user = new User("Bob"); 
EasyMock.expect(userDaoMock.getPhone(user)).andReturn(new Phone()); 

Lorsque j'ai essayé de lancer le test ci-dessus, il se plaint d'appel de méthode inattendue que je suppose que l'utilisateur créé dans la actualy méthode n'est pas le même que celui que je suis en ... passe Ai-je raison à ce sujet?

Ou est la façon la plus stricte que je pouvais tester le paramètre je passe dans UserDao est juste:

EasyMock.expect(userDaoMock.getPhone(EasyMock.isA(User.class))).andReturn(new Phone()); 
+0

Est-ce que votre classe 'User' a une méthode' equals'? –

Répondre

3

Vous avez raison que l'appel de méthode inattendu est jeté parce que l'objet User est différent entre le prévu et les appels réels au getPhone.

Comme @ laurence-Gonsalves mentionne dans le commentaire, si User a une méthode equals utile, vous pouvez utiliser EasyMock.eq(mockUser) dans l'appel prévu à getPhone qui devrait vérifier que les deux User objet sont égaux. Jetez un coup d'œil sur le EasyMock Documentation, plus précisément dans la section «Attentes flexibles avec les compensateurs d'argument».

+0

Donc, si j'implémente la méthode equals pour User, puis-je passer dans userMock, ou dois-je encore utiliser EasyMock.eq (mockUser) comme vous l'avez suggéré avec les égalités implémentées? – Glide

+0

Si la méthode User equals se compare au nom (Bob), puis en créant la méthode attendue via User mockUser = new User ("Bob"); EasyMock.expect (userDaoMock.getPhone (EasyMock.eq (mockUser))) etReturn (nouveau téléphone()); devrait marcher – DoctorRuss

1

Vous pouvez utiliser

EasyMock.expect(userDaoMock.getPhone(EasyMock.anyObject())).andReturn(new Phone()); 

Je pense que cela devrait résoudre votre problème.

0

Un peu de changement dans la réponse donnée par Yeswanth Devisetty

EasyMock.expect(userDaoMock.getPhone(EasyMock.anyObject(User.class))).andReturn(new Phone());

Cela permettra de résoudre le problème.