ScalaMock, возвращается на основе ClassTag - PullRequest
1 голос
/ 04 октября 2019

Как я могу заглушить метод, который использует 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

Спасибо

1 Ответ

2 голосов
/ 04 октября 2019

Пытаясь упростить вашу проблему, метод

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

похож на ограничение контекста на метод 0-арности

def foo[I: ClassTag]

, который эквивалентен методу с одним неявным аргументом

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

, следовательно, рассматривая Методы с неявными параметрами мы можем посмеяться так

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