我有一个单元测试开始在Circle CI上失败,仅 。在此示例(Kotlin)的最后一行失败:
Caused by: java.util.NoSuchElementException
投掷:collect
。
如果我不使用并行流,它将始终在我的本地计算机或Circle CI上运行。我的理论是{{1}}调用返回一个列表快照(实际上直到列表完全填满它才阻塞),并且CI没有足够的CPU来收集其他线程中的单个元素?
但是,我的视频流是有序的,因此收集器对吗?这甚至是并行收集的吗?
答案 0 :(得分:3)
您正在获取的异常中可能包含一条消息,而不仅仅是异常的名称。该消息可能告诉您错误。例如,代码的最后一部分调用Kotlin扩展功能last()
,该功能在实现中:
public fun <T> List<T>.last(): T {
if (isEmpty())
throw NoSuchElementException("List is empty.")
return this[lastIndex]
}
因此,如果在堆栈跟踪中看到java.util.NoSuchElementException
的消息“列表为空”,那就是原因。
此外,如果共享堆栈跟踪,则可以实际看到引发异常的原因。但是查看您的代码,这是唯一可能的选择。
然后的问题是,“为什么最终列表为空?!” ... generateNames(50)
在这种环境下的工作方式是否有所不同?问题不在collect(Collectors.toList())
上,它提供了同步结果。