对于下面给定的代码,在 Kotlin 中,无法执行该函数forEach
(或任何类似的,map
, filter
,等等...),因为BarList
它是模拟的。forEach
所以没有调用和亲属的本机实现。在互联网上进行了一些搜索后,我得到了这个:
public class BarList<E> extends AbstractList<E> implements OrderedBarCollection<E> {
//...
}
//...
val mockedList: BarList<Foo> = mockBarList()
val fooList = listOf(Foo())
`when`(mockedList.iterator()).thenReturn(fooList.iterator())
`when`(mockedList.size).thenReturn(fooList.size)
com.nhaarman.mockito_kotlin
.doCallRealMethod()
.`when`(mockedList)
.forEach(Mockito.any<Consumer<Foo>>()) //Attempt to call the Consumer.
mockedList.forEach { foo ->
//Not executing
}
我根据这个问题的答案在上面尝试了这个:https ://stackoverflow.com/a/49407513/2430555
我也试过:
com.nhaarman.mockito_kotlin.doCallRealMethod().`when`(mockedList).forEach(any())
但它导致:
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers!
0 matchers expected, 1 recorded:
//...
forEach
Kotlin 源码中的定义是:
public inline fun <T> Iterable<T>.forEach(action: (T) -> Unit): Unit
我想我应该用any()
匹配的东西替换action: (T) -> Unit
,但我不知道该怎么做。如果需要,我不介意使用交互器,但我至少需要forEach
按预期运行。你们能帮帮我吗?
问候,
佩德罗