// do something を ??? に変更しました コンパイルしてから、パーサー フェーズの最後にコードを出力します。
$scalac MyService.scala -Xprint:parser
[[syntax trees at end of parser]] // MyService.scala
package <empty> {
object MyService extends MyTrait {
def <init>() = {
super.<init>();
()
};
def myMethod[T](builder: T)(implicit evidence$1:_root_.scala.Function1[T,InvokableBuilder[MyClass]]): MyResponse = $qmark$qmark$qmark
}
}
ご覧のとおり、ビュー バウンドにより、myMethod には 2 番目のパラメーター リストがあります。Mockito でそれをどのようにモックするかはわかりませんが、ScalaMock を試してみることをお勧めします。
注: ビューの境界は非推奨です。それらを暗黙のパラメーターに置き換えることをお勧めします (上記の scalac パーサーがどのようにそれを行うかを参照してください)。
長い例:
import org.scalamock.scalatest.MockFactory
import org.scalatest.FlatSpec
import scala.language.implicitConversions
class FooTest extends FlatSpec with MockFactory {
trait MyTrait {
def myMethod[T](builder: T)(implicit ev$1: T => InvokableBuilder[MyClass]): MyResponse
}
trait InvokableBuilder[T]
class MyClass
class MyResponse
class Foo
object MyService extends MyTrait {
def myMethod[T](builder: T)(implicit ev$1: T => InvokableBuilder[MyClass]): MyResponse = {
//do something
???
}
}
behavior of "Foo"
it should "foo" in {
val x = mock[MyTrait]
implicit val fooConvert: Foo => InvokableBuilder[MyClass] = ???
(x.myMethod(_: Foo)).expects(*).once()
}
}