использование jmock в Scala с параметризованной функцией типа - PullRequest
0 голосов
/ 09 октября 2018

Я хочу протестировать функцию, которая записывает вывод в RDD в Scala Spark.

Часть этого теста - макет карты на RDD с использованием jmock

val customerRdd = mockery.mock(classOf[RDD[Customer]], "rdd1")
val transformedRddToWrite = mockery.mock(classOf[RDD[TransformedCustomer]], "rdd2")

mockery.checking(new Expectations() {{
  // ...
  oneOf(customerRdd).map(
    `with`(Expectations.any(classOf[Customer => TransformedCustomer]))
  )
  will(Expectations.returnValue(transformedRddToWrite))
  // ...
}})

Однаковсякий раз, когда я пытаюсь запустить этот тест, я получаю следующую ошибку: not all parameters were given explicit matchers: either all parameters must be specified by matchers or all must be specified by values, you cannot mix matchers and values, несмотря на то, что я указал соответствия для всех параметров на .map.

Как это исправить?Может ли jMock поддерживать сопоставление функциональных аргументов Scala с неявными тегами класса?

1 Ответ

0 голосов
/ 09 октября 2018

jMock Я думал, что заброшен с 2012 года. Но если вам это нравится, то больше сил для вас.Одна из проблем заключается в том, что для map требуется ClassTag[U] в соответствии с сигнатурой:

def map[U: ClassTag](f: T => U): RDD[U], где U - тип возврата вашей функции.

Я собираюсь предположить, чточто, если вы хотите сделать это с помощью среды Java-макетов, используйте предположение, что подпись map равна public <U> RDD<U> map(scala.Function1<T, U>, scala.reflect.ClassTag<U>);

Надеюсь, что это сработает.

...