2010-03-24 3 views
0

Code Voir juste en dessousQue dois-je faire pour tester les objets EasyMock lors de l'utilisation de Generics? EasyMock

Notre interface générique

public interface Repository<INSTANCE_CLASS, INSTANCE_ID_CLASS> { 

    void add(INSTANCE_CLASS instance); 
    INSTANCE_CLASS getById(INSTANCE_ID_CLASS id); 

} 

Et une seule classe

public class Order { 

    private Integer id; 
    private Integer orderNumber; 

    // getter's and setter's 

    public void equals(Object o) { 
     if(o == null) 
      return false; 

     if(!(o instanceof Order)) 
      return false; 

     // business key 
     if(getOrderNumber() == null) 
      return false; 

     final Order other = (Order) o; 
     if(!(getOrderNumber().equals(other.getOrderNumber()))) 
      return false; 

     return true;  
    } 

    // hashcode 

} 

Et quand je fais le test suivant

private Repository<Order, Integer> repository; 

@Before 
public void setUp { 

    repository = EasyMock.createMock(Repository.class); 

    Order order = new Order(); 
    order.setOrderNumber(new Integer(1)); 

    repository.add(order); 

    EasyMock.expectLasCall().once(); 
    EasyMock.replay(repository); 
} 

@Test 
public void addOrder() { 
    Order order = new Order(); 
    order.setOrderNumber(new Integer(1)); 

    repository.add(order); 

    EasyMock.verify(repository) 
} 

Je reçois

Unexpected method call add([email protected]): 
    add([email protected]): expected: 1, actual: 0 
     at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:43) 
     at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:72) 
     at $Proxy4.add(Unknown Source) 

Pourquoi ça marche pas comme prévu ??? Que dois-je faire pour passer le test? Toute solution de contournement?

Répondre

1

Je copiais votre code et a couru avec Java 1.6 en utilisant EasyMock 2.0 et il fonctionne très bien. Je devais corriger certaines parties comme public void equals(Object o) qui devraient être public boolean equals, mais il semble clair que vous aviez raison dans votre code réel. Utilisez-vous une autre version d'EasyMock ou est-ce que quelque chose me manque?

Vive Thomas

+0

@Thomas THANS pour votre réponse, Thomas. ok à propos de booléens égaux. Avez-vous fait comme indiqué ci-dessus? J'utilise la version 2.5.2 –

+0

@Arthur je l'ai changé et il fonctionne 2.5.2 encore, de la ligne de commande et dans Eclipse. J'ai vraiment copié collé tout votre code comme il est écrit ci-dessus et ajouté des getters et des setters. –

+0

Vous avez raison. J'ai manqué du code dans l'implémentation d'égal à égal. Accepté. Bon à savoir EasyMock prend en charge Generic –

Questions connexes