Использование 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>);
Надеюсь, это сработает.