ScalaMock,returns 基于 ClassTag

ScalaMock, returns based on a ClassTag

如何在实现中存根使用 ClassTag 的方法?

class RefsFactory {
  def get[I <: Item : ClassTag]: RefTo[I] = {
    val itemType = implicitly[ClassTag[A]].runtimeClass.asInstanceOf[Class[A]]
    // ...
  }
}

这个 class 在我们的代码中使用了很多,我想把它存根给 return 其他关于 itemType.

的模拟
val factory = stub[RefsFactory]
val otherType = stub[RefTo[OtherType]]
(factory.get[OneType]) returns RefTo(new OneType())
(factory.get[OtherType]) returns otherType

谢谢

试图简化你的问题,方法

def get[I <: Item : ClassTag]: RefTo[I]

类似于在 0-arity 方法上绑定上下文

def foo[I: ClassTag]

等同于带有一个隐式参数的方法

def foo[I](implicit ev: ClassTag[I)

因此考虑到 Methods with implicit parameters 我们可以这样模拟

(myMock.foo[SomeType](_: ClassTag[SomeType])).expects(*).returns(...)