在Scala中将jmock与类型参数化功能一起使用

时间:2018-10-08 21:14:11

标签: scala apache-spark jmock

我想测试一个在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功能参数进行匹配吗?

1 个答案:

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

希望那行得通。