2013-02-27 136 views
2

我寫一個parameterized JUnit 4測試與100K左右的參數的情況下,我想從數據的方法返回一個集合,加載的東西懶洋洋地。但是,當我返回我的java.util.Collection執行說我的收藏cannot be cast to java.util.List後,我得到了類拋出的異常。我是否需要實施List<Object[]>,而不是Collection<Object[]>即使@Parameters標註的方法要返回Collection<Object[]>參數JUnit測試延遲集合

+0

「迴歸」?你的data()方法?你爲什麼要選擇一個列表;你需要一個有序的集合嗎?無論你在做什麼,都不會返回列表。如果你需要以某種方式訂購它,你總是可以從data()返回的集合中創建一個列表,但我無法想象爲什麼你想這麼做,除非你有一個非常奇特的測試場景。事實上,除非你正在測試測試,否則我不清楚爲什麼你會調查data()的返回值。 – 2013-03-02 00:21:45

+0

是的,從'data()'方法返回。我沒有對「List」進行投射。看起來像Junit正在將'data()'方法返回的'Collection '投射到'List '。我想要的只是返回'Collection'的實現,以便我可以懶惰地返回元素,而不是一次構建所有元素並返回它們。 – Eqbal 2013-03-06 16:13:42

+0

我有一個類似的需求 - 我的參數集是從外部計算出來的,所以我想在第一個參數集可用時立即開始運行我的第一個測試,然後在下一個準備好時阻塞。但是,@Parameters在開始第一次測試之前嘗試排除數據()。 – 2015-02-24 19:37:35

回答

0

我在這裏猜測,因爲你還沒有提供任何代碼,Hibernate可能返回列表<對象>,而不是列表<對象[]>。在data()方法的主體中,遍歷Hibernate返回集合並將對象插入到對象數組中,然後收集這些對象並返回它們。從什麼

List<Object[]> result = new ArrayList<Object[]>(); 
for (Object obj : hibernateReturnCollection) { 
    Object[] element = new Object[1]; 
    element[0] = obj; 
    result.append(element); 
} 
return result;