我想测试一个在Scala Spark中的RDD中写入输出的函数。
此测试的一部分是使用jmock在RDD上模拟地图
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功能参数进行匹配吗?
答案 0 :(得分:0)
我认为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>);
希望那行得通。