【问题标题】:ScalaMock, returns based on a ClassTagScalaMock,基于 ClassTag 返回
【发布时间】:2019-10-04 11:41:35
【问题描述】:

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

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

这个类在我们的代码中被大量使用,我想将它存根以返回其他关于 itemType 的模拟。

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

谢谢

【问题讨论】:

    标签: scala testing stub stubbing scalamock


    【解决方案1】:

    尽量简化你的问题,方法

    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(...)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 2017-10-17
      • 2018-09-19
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多