2016-02-08 39 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

相关问题