Макет для понимания в скале - PullRequest
0 голосов
/ 26 февраля 2011

У меня есть этот кусок кода

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

, и я хотел бы протестировать его.Я хочу смоделировать table.find, чтобы вернуть последовательность элементов, которую я хочу.Я попытался смоделировать hasNext() и next() методы интерфейса Iterator, но, похоже, он не работает.Какой способ издеваться над пониманием?

Ответы [ 2 ]

2 голосов
/ 26 февраля 2011

Каждый для понимания переводится в 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))

Редактировать 1

Как заметил Даниэль , метод filter в настоящее время исключен для понимания. Вместо этого вы должны использовать withFilter. Для получения дополнительной информации вы можете посмотреть в этой теме:

http://scala -programming-language.1934581.n4.nabble.com / Переосмысление фильтр-td2009215.html # a2009218

и этот связанный с ним вопрос:

руководство по переходу с фильтра на фильтр?

0 голосов
/ 26 февраля 2011

Теоретически вам следует смоделировать метод map, но вам, вероятно, лучше просто, если table.find вернет один из предопределенных типов коллекций.

...