我试图模拟属于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
}
}
用户指南中对此进行了介绍