2016-08-03 120 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被拋出,除非它可以安全地轉換爲返回類型。一種這樣的轉換是從數組到集合或迭代器。