abstract trait MyApi {
def getResult()(implicit ec: ExecutionContext): Future[String]
}
The following doesn't work:
val m = mock[MyApi]
(m.getResult _).expects() returning "..."
It fails with:
java.lang.ClassCastException: org.scalamock.MockFunction1 cannot be cast to org.scalamock.MockFunction0
Note: the example given in http://scalamock.org/user-guide/advanced_topics/ is only useful if the method has at least one argument. So we can't use the solution as in mocking methods which use ClassTag in scala using scalamock
You didn't look at the right example, I guess. Look at example 4 for implicit parameters:
class Codec()
trait Memcached {
def get(key: String)(implicit codec: Codec): Option[Int]
}
val memcachedMock = mock[Memcached]
implicit val codec = new Codec
(memcachedMock.get(_ : String)(_ : Codec)).expects("some_key", *).returning(Some(123))
In your case, of course, the non-implicit params are null, so you want:
(m.getResult()(_: ExecutionContext)).expects(*) returning "..."
Just to complete the cases. If someone tries to do the same with more params the snippet is the following:
trait MemcachedV2 {
def get(key: String, value: String)(implicit codec: Codec): Option[Int]
}
val memcachedMock2 = mock[MemcachedV2]
(memcachedMock2.get(_, _)(_))
.expects("some_key","another value", *)
.returning(Some(123))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With