如何在 Scalamock 中模拟带有清单的多态函数?
How to mock a polymorphic function with manifest in Scalamock?
我正在尝试模拟属于 Scala 特征的多态函数。该方法用 [T: Manifest]
参数化
一个最低限度的工作(或失败,我应该说)示例如下:
class ScalaMockTest extends FlatSpec with MockFactory {
trait testObject {
def parameterizedFunction[T: Manifest](a: T): T
}
it should "not fail with scalamock" in {
val mockObject = mock[testObject]
(mockObject.parameterizedFunction[Int] _)
.expects(*)
.returns(3)
mockObject.parameterizedFunction[Int](3)
}
}
这会导致以下错误:
org.scalamock.function.MockFunction2 cannot be cast to org.scalamock.function.MockFunction1
当我删除将函数定义更改为 def parameterizedFunction[T](a: T): T
(没有 :Manifest
)时,此错误不再发生。
我怎样才能摆脱这个运行时错误,为什么会发生这种情况?不幸的是,简单地删除 Manifest
是不可能的,因为我实际上试图模拟的代码中存在依赖关系。
稍微调整一下语法应该可以正常工作:
class ScalaMockTest extends FlatSpec with Matchers with MockFactory {
trait testObject {
def parameterizedFunction[T: Manifest](a: T): T
}
"this" should "not fail with scalamock" in {
val mockObject = mock[testObject]
(mockObject.parameterizedFunction(_ : Int)(_ : Manifest[Int]))
.expects(*, *)
.returns(4)
mockObject.parameterizedFunction[Int](3) shouldBe 4
}
}
它包含在the user guide
中
我正在尝试模拟属于 Scala 特征的多态函数。该方法用 [T: Manifest]
一个最低限度的工作(或失败,我应该说)示例如下:
class ScalaMockTest extends FlatSpec with MockFactory {
trait testObject {
def parameterizedFunction[T: Manifest](a: T): T
}
it should "not fail with scalamock" in {
val mockObject = mock[testObject]
(mockObject.parameterizedFunction[Int] _)
.expects(*)
.returns(3)
mockObject.parameterizedFunction[Int](3)
}
}
这会导致以下错误:
org.scalamock.function.MockFunction2 cannot be cast to org.scalamock.function.MockFunction1
当我删除将函数定义更改为 def parameterizedFunction[T](a: T): T
(没有 :Manifest
)时,此错误不再发生。
我怎样才能摆脱这个运行时错误,为什么会发生这种情况?不幸的是,简单地删除 Manifest
是不可能的,因为我实际上试图模拟的代码中存在依赖关系。
稍微调整一下语法应该可以正常工作:
class ScalaMockTest extends FlatSpec with Matchers with MockFactory {
trait testObject {
def parameterizedFunction[T: Manifest](a: T): T
}
"this" should "not fail with scalamock" in {
val mockObject = mock[testObject]
(mockObject.parameterizedFunction(_ : Int)(_ : Manifest[Int]))
.expects(*, *)
.returns(4)
mockObject.parameterizedFunction[Int](3) shouldBe 4
}
}
它包含在the user guide
中