Использование jmock в Scala с параметризованной функцией типа

Я хочу протестировать функцию, которая записывает вывод в 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 ответ

Решение

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>);

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

Другие вопросы по тегам