Я хочу проверить неявный метод, который оборачивает memcached OperationFuture в обещанное Scala .concurrent.Future
Я абсолютно не знаю, как проверить этот код с помощью org.mockito.scalatest
implicit def operationFutureAsScala[T](underlying: OperationFuture[T])(
implicit ec: ExecutionContext
): ServiceResult[T] = ServiceResult {
val p = Promise[T]()
underlying.addListener((f: OperationFuture[_]) => f.getStatus match {
case status if status.isSuccess => p.success(underlying.get)
case status => p.failure(new Throwable(status.getMessage))
})
p.future.map(Right(_)).recover {
case t: Throwable => Left(ApiError(s"${t.getMessage}"))
}
}
Фон:
MemcachedClient (net .spy.memcached. {MemcachedClient => JMemcachedClient}) имеет метод "set", который возвращает OperationFuture [T] наподобие
def set[T](key: String, ttl: Int, value: T): OperationFuture[T] = underlying.set(key, ttl, value).get
Я хочу обернуть это OperationFuture в хорошее Scala Future в go от Java World.
У вас есть какие-нибудь идеи?
Какой-то подход, как насмешливый:
import java.lang.{Boolean => JBoolean}
import java.util.concurrent.{Future => JFuture}
import net.spy.memcached.{MemcachedClient => JMemcachedClient}
val memcachedClient = mock[MemcachedClient]
val underlying: JMemcachedClient = mock[JMemcachedClient]
val operationFuture: OperationFuture[JBoolean] = mock[OperationFuture[JBoolean]]
, а затем
"A#operationFutureAsScala" must {
"yolo" in {
underlying.set(*, *, *) returns operationFuture
operationFuture.get returns true
whenReady(memcachedClient.set("123", 1000, true)(...)
}
напишите мне, если вам нужна дополнительная информация.