在 Scala 中将 类 与 Mockito 匹配

Match classes in Scala with Mockito

我正在尝试在调用 newAPIHadoopFile 时将 Spark 上下文模拟为 return 模拟 RDD。

我设置如下:

val mockedOuterRdd = mock[RDD[(NullWritable, MyProtobuf)]]

mockedSc.newAPIHadoopFile(anyString, anyObject(),classOf[org.apache.hadoop.io.NullWritable],
  classOf[MyProtobuf],anyObject()) returns mockedOuterRdd

这在编译器中很好,但是当我 运行 它时我得到

Invalid use of argument matchers!
5 matchers expected, 3 recorded:
-> at ...
This exception may occur if matchers are combined with raw values:
    //incorrect:
    someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
    //correct:
    someMethod(anyObject(), eq("String by matcher"));

有没有什么方法可以让我在 classOf[...] 中使用类似 eq(...) 的东西(我已经试过了,但没有用)?

我已经尝试使用 anyObject 作为 类,但它从这些推断出 RDD 的类型参数,因此它们必须是正确的。

感谢阅读。

eq 适合我,但我猜您可能遗漏了测试框架的一些细节。我使用 scalatest,当我尝试使用 eq 时,它一直对我大喊大叫,因为我返回 boolean 而不是 Class。但是,有一个通用的 eq 应该接管。所以,解决方案是使用完整路径:

mockedSc.newAPIHadoopFile(anyString, anyObject(),
  org.mockito.Matchers.eq(classOf[org.apache.hadoop.io.NullWritable]), 
  org.mockito.Matchers.eq(classOf[org.apache.hadoop.io.NullWritable]), anyObject())