Pergunta

Suppose I am testing results of Futures (see below) with specs2.

def f1():Future[String] = {...}
def f2():Future[String] = {...}

I have Matchers[String] to check the results

def m1():Matcher[String] = {...}
def m2():Matcher[String] = {...}

Now I can use implicits to create Matcher[Future[String]].

def fm1():Matcher[Future[String]] = m1.await(retries=2, timeout=2.seconds)
def fm2():Matcher[Future[String]] = m2.await(retries=2, timeout=2.seconds)   

So far so good, but I don't like that repeating retries = 2 and timeout = 2.seconds. How can I define them just once and reuse them across all await calls in the spec ?

Foi útil?

Solução

case class Retry(value:Int) extends AnyVal
case class Timeout(value:Duration) extends Anyval

implicit class MatcherWithImplicitValues[A](m:Matcher[A]) {
  def awaitWithImplicitValues(implicit r:Retry, t:Timeout) = {
    m.await(retries = r.value, timeout = t.value)
  }
}

implicit val retries = Retry(2)
implicit val timeout = Timeout(2 seconds)

m1.awaitWithImplicitValues
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top