2010-03-24 52 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