Единственный способ добиться этого - использовать неявные преобразования, а не неявные классы
Это хак, предназначенный для демонстрации того, как этого можно достичь, но я хотел бы взглянуть накод и понять, почему вам действительно нужно это сделать
Итак, следуя вашему примеру, вы можете изменить код так, чтобы он выглядел следующим образом
trait Foo {
def bar: String
}
object FooExtensions {
object implicits {
implicit fooToOps(foo: Foo): FooOps = new FooOps(foo)
class FooOps(foo: Foo) {
def baz: String = "baz"
}
}
}
и ваш тест
import org.scalatest.WordSpec
import org.mockito.MockitoSugar
class MySpec extends WordSpec with MockitoSugar {
"My mock" should {
"handle methods from implicit classes" in {
val fooOps = mock[FooOps]
implicit fooToOps(foo: Foo): FooOps = fooOps
val foo = mock[Foo]
when(foo.baz) thenReturn "bix" // works
}
}
}
Другая вещь, которую следует учитывать, заключается в том, что в вашем производстве вам нужно получить неявный параметр формы Foo => FooOps
, поэтому при вызове этого метода из теста предоставляется фактическая неявная имитация ...
Как я уже сказал, вы можете заставить его работать так, но я согласен с Матеушем, что вам не нужно