在 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())
我正在尝试在调用 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())