在 Scala 中使用带有类型参数化函数的 jmock
using jmock in Scala with type parameterized function
我想测试一个在 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 函数参数上匹配隐式类标签吗?
jMock 我认为自 2012 年以来就被废弃了。但如果你喜欢它,那么给你更多的力量。其中一个问题是 map
根据签名需要 ClassTag[U]
:
def map[U: ClassTag](f: T => U): RDD[U]
其中 U 是函数的 return 类型。
我强烈假设如果你要使用 Java 模拟框架来完成这项工作,请假设 map
的签名是 public <U> RDD<U> map(scala.Function1<T, U>, scala.reflect.ClassTag<U>);
希望有用。
我想测试一个在 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 函数参数上匹配隐式类标签吗?
jMock 我认为自 2012 年以来就被废弃了。但如果你喜欢它,那么给你更多的力量。其中一个问题是 map
根据签名需要 ClassTag[U]
:
def map[U: ClassTag](f: T => U): RDD[U]
其中 U 是函数的 return 类型。
我强烈假设如果你要使用 Java 模拟框架来完成这项工作,请假设 map
的签名是 public <U> RDD<U> map(scala.Function1<T, U>, scala.reflect.ClassTag<U>);
希望有用。