0

私はこのコードを持っています

   for (element <- table.find;
     Right(info) = exceptionManager(mapper.getInfoFromDbObject(element)))
yield info

ユニットテストをしたいと思います。必要な要素のシーケンスを返すために、table.find をモックしたいと考えています。hasNext()Iterator インターフェイスのモックとメソッドを試しnext()ましたが、機能していないようです。理解のためにaをモックする方法はどれですか?

4

2 に答える 2

3

各 for 内包表記はmap、 、flatMapfilterメソッド呼び出しに変換されます。したがって、少なくともそれらを嘲笑する必要があります。

ここで詳細情報を見つけることができます (例):

http://www.lambdascale.com/2010/12/the-adventures-of-a-java-developer-in-monadland/

そしてもちろん、Programming in Scala book に詳しい説明があります。

編集

しかし、Dave Griffithが言ったように、新しい自分を初期化することができIteratorます。MockitoScalaTestを使用する例を次に示します。

val table = mock[TableClass]
when(table find) thenReturn Iterator(new ModelObject(1), new ModelObject(2))

編集 1

ダニエルが気づいたように、filterメソッドは理解のために非推奨になりました。代わりに を使用する必要がありますwithFilter。詳細については、次のスレッドを参照してください。

http://scala-programming-language.1934581.n4.nabble.com/Rethinking-filter-td2009215.html#a2009218

およびこの関連する SO の質問:

フィルターから withFilter に移動するためのガイド?

于 2011-02-26T16:45:23.773 に答える
0

理論的には、「マップ」メソッドをモックする必要がありますが、単純に table.find が事前定義されたコレクション型の 1 つを返すようにする方がよいでしょう。

于 2011-02-26T16:52:09.253 に答える