2013-02-27 94 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;