【问题标题】:Match classes in Scala with Mockito将 Scala 中的类与 Mockito 匹配
【发布时间】:2015-04-08 16:10:34
【问题描述】:

我正在尝试模拟 Spark 上下文以在调用 newAPIHadoopFile 时返回模拟的 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"));

有没有办法可以将eq(...)(我尝试过但不起作用)之类的东西与classOf[...]一起使用?

我尝试将anyObject 用于类,但它从这些类中推断出 RDD 的类型参数,因此它们必须是正确的。

感谢阅读。

【问题讨论】:

标签: scala apache-spark mockito


【解决方案1】:

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())

【讨论】:

  • 当我尝试它时,我收到了关于它返回布尔值的错误 - 这可以解决问题。谢谢
  • 谢谢!我有同样的问题,使用整个路径 org.mockito.Matchers.eq 也对我有用!我仍然不明白为什么没有完整的导入路径就无法使用它...
猜你喜欢
  • 2015-02-02
  • 2015-06-22
  • 2022-01-23
  • 2013-09-03
  • 2014-05-28
  • 1970-01-01
  • 2013-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多