2010-08-16 6 views
0

suppose que je veux moquer une méthode avec la signature suivante:EasyMock, andReturn une capture

public A foo(A a) 

Je veux foo être moqué d'une manière qu'il est revenu ce qu'elle a reçu (qui est la même instance a)

J'ai essayé, sans succès, ce qui suit:

Capture<A> capture = new Capture(); 
expect(myclass.foo(capture)).andReturn(capture.getValue()); 

Cela ne fonctionne pas parce que la capture est encore vide lorsque getValue() est appelée.

Des idées?

Merci

Répondre

4
public class A { 

    public <A> A foo(A a) { 
     return null; 
    } 

    public static void main(String[] args) throws Exception { 
     A mock = createNiceMock(A.class); 

     expect(mock.foo(anyObject())).andAnswer(new IAnswer<Object>() { 
      @Override 
      public Object answer() throws Throwable { 
       return EasyMock.getCurrentArguments()[0]; 
      } 
     }).anyTimes(); 

     replay(mock); 

     System.out.println(mock.foo("1")); 
     System.out.println(mock.foo(2L)); 
    } 
} 

imprime:

1 
2 
+0

ressemble un peu trop complexe. N'y a-t-il pas un moyen plus facile? – odwl

+0

vous pourriez extraire la réponse à votre propre classe. – IAdapter

+0

Exemple d'extraction en classe séparée: http://stackoverflow.com/questions/2667172/how-can-i-mock-a-method-in-easymock-that-shall-return-one-of-its-parameters Définissez-le une fois, puis partout où vous voulez l'utiliser, vous dites simplement attendre (...) .etRépondre (new ArgumentAnswer ()) – wrschneider

Questions connexes