Тест net.sp.memcached через Mockito в Scala Play - PullRequest
0 голосов
/ 31 января 2020

Я хочу проверить неявный метод, который оборачивает 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)(...)
  }

напишите мне, если вам нужна дополнительная информация.

...