我将您的// 更改为 ??? 所以它会编译,然后在解析器阶段结束时打印代码:
$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 有第二个参数列表。我不确定你会如何用 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()
}
}