如何在 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