2016-08-03 84 views
0

我正在用JMockit中的本地方法嘲笑DAO方法。实际的DAO方法返回一个List,作为本地mock方法返回一个订单数组。 (这不是一个预期的设计,由于疏忽重构而导致这种情况)。但是,这仍然编译好,并且(不幸地)通过了测试用例。JMockit自动将Array转换为ArrayList

尽管我后来更正了我的模拟方法以与实际的DAO方法相匹配,但我想知道JMockit如何让我模拟这种方式。它如何不匹配返回类型?这是一个功能还是错误!

@Test 
    public void testApplyTemplate() throws Exception { 
     new Expectations() { 

      { 
       orderDAO.getOrders(); 
       result = getOrdersMock(); 
      } 
     }; 
     myService.applyTemplate(); 
     new Verifications() { 

      { 
       ... 
      } 
     }; 
    } 

private Order[] getOrdersMock() { 
     Order[] ordersArray = null; 
     // create 9 dummy orders, o1 to o9 
     orderArray = new Order[] { o1, o2, o3, o4, o5, o6, o7, o8, o9 };   
     return orderArray; 
    } 

public interface OrderDAO { 

    List<Order> getOrders(); 
} 

回答

2

这是一个特征,并且它在API documentation描述的用于result字段(第五段):

分配,其类型由该方法返回类型不同的值将导致一个IllegalArgumentException被抛出,除非它可以安全地转换为返回类型。一种这样的转换是从数组到集合或迭代器。