2016-02-08 38 views
1

我正在使用@DataProvider annotation for TestNG構建動態測試。在Java中,如何將定義爲Queue<Deque<String>> queueOfDeques = ArrayDeque<Deque<String>>();的數據結構轉換爲Object[][]?基於this explanation,我嘗試這樣做:在Java中將隊列<Deque <String>>轉換爲對象[] [] [

@DataProvider(name = "providedQueue") 
public static Object[][] dataForTest(){ 
     return new Object[][]{{SomeClass.GetQueueOfDeques}}; 
    } 

GetQueueOfDeques返回上面定義的queueOfDeques數據結構的方法。我不知道我在做什麼錯誤,但它不會像應該那樣轉換變量,從而導出TestNG忽略參數化測試。

java.lang.ClassCastException:net.easysol.detectid.migrationtester.ArrayDeque不能轉換爲java.lang.String

+1

我知道這不是我的業務......但爲什麼要降級到Object [] []集合?您仍然需要重新投射其內容,以便能夠訪問元素方法:/ –

+1

@DiegoMartinoia這是'@ DataProvider'適用的返回類型。 –

回答

2

通過迭代只要做到這一點:

static Object[][] convert(Collection<? extends Collection<?>> cc) { 
    Object[][] res = new Object[cc.size()][]; 
    int i = 0; 
    for (Collection<?> c : cc) 
     res[i++] = c.toArray(); 
    return res; 
} 

這樣的您可以獲得任何類型的任意集合(如<?>所引用的)的任何集合集合(它們可能是Queue,Deque, List和許多其他集合)的轉換爲Object[][]數組。

+0

我將'res [i ++] = c.toArray();'改成了'res [i ++] = Object [] {c}'並且完美地工作。太多了@ sasha-salauyou – Venom

相關問題