2010-03-24 81 views
0

見代碼只是吼叫使用泛型時,我應該如何測試EasyMock對象? EasyMock的

我們的通用接口

public interface Repository<INSTANCE_CLASS, INSTANCE_ID_CLASS> { 

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

} 

和單一類

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 

} 

當我做下面的測試

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) 
} 

我得到

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) 

爲什麼它不按預期方式工作?我該怎麼做才能通過測試?任何解決方法???

回答

1

我複製了你的代碼,並使用EasyMock 2.0與Java 1.6一起運行它,它工作得很好。我不得不修復一些部分,如public void equals(Object o)這應該是public boolean equals,但似乎很清楚您在真實代碼中是否正確。 您使用的是其他EasyMock版本還是錯過了某些內容?

乾杯 托馬斯

+0

@Thomas您的回覆,托馬斯Thans。關於布爾等於確定。你如上所示完成了嗎?我正在使用2.5.2版本 – 2010-03-25 20:03:33

+0

@Arthur我將它改爲2.5.2,它仍然可以在命令行和eclipse中使用。我真的複製了上面寫的所有代碼,並添加了getters和setter。 – 2010-03-25 20:35:38

+0

你說得對。我錯過了平等執行中的一些代碼。公認。相關提示EasyMock支持Generic – 2010-03-25 20:50:07