我有这段代码
for (element <- table.find;
Right(info) = exceptionManager(mapper.getInfoFromDbObject(element)))
yield info
我想对它进行单元测试。我想模拟 table.find 以返回我想要的元素序列。我已经尝试过迭代器接口的模拟hasNext()
和next()
方法,但它似乎不起作用。模拟理解的方法是什么?
我有这段代码
for (element <- table.find;
Right(info) = exceptionManager(mapper.getInfoFromDbObject(element)))
yield info
我想对它进行单元测试。我想模拟 table.find 以返回我想要的元素序列。我已经尝试过迭代器接口的模拟hasNext()
和next()
方法,但它似乎不起作用。模拟理解的方法是什么?
每个 for comprehension 都转换为map
, flatMap
,filter
方法调用。所以你至少应该嘲笑他们。
您可以在此处找到更多信息(例如):
http://www.lambdascale.com/2010/12/the-adventures-of-a-java-developer-in-monadland/
当然,您会在 Scala 编程一书中找到深入的解释。
但正如戴夫格里菲斯所说,你可以Iterator
自己初始化新的。这是一个使用Mockito和ScalaTest的示例:
val table = mock[TableClass]
when(table find) thenReturn Iterator(new ModelObject(1), new ModelObject(2))
正如丹尼尔所注意到的,filter
方法现在在理解中被弃用了。相反,您应该使用withFilter
. 有关更多信息,您可以查看此线程:
http://scala-programming-language.1934581.n4.nabble.com/Rethinking-filter-td2009215.html#a2009218
和这个相关的SO问题:
理论上,您应该模拟“map”方法,但您最好让 table.find 返回预定义的集合类型之一。