将期货传递给whenReady失败

Mar*_*ijn 10 unit-testing scala future scalatest

我正在尝试用期货编写一个规范,我不确定我应该如何使用这个Futures特性.我必须传递whenReady一个FutureConcept,但我找不到我应该如何构建一个Future.文件内容如下:

为了使whenReady更广泛适用,它接受的未来类型是FutureConcept [T],其中T是未来承诺的价值类型.将future传递给whenReady需要从您希望传递的未来类型(建模类型)到FutureConcept [T]的隐式转换.

据我所知,我必须在a Future和a 之间写一个隐式转换FutureConcept(这对我来说似乎不对,因为它似乎应该是样板文件,但它是我唯一可以做到的).我无法弄清楚如何做到这一点,FutureConcept的文档很方便地告诉我

有关此特征为期货测试提供的语法的详细信息,请参阅特征期货的文档.

让我走完整圈.我做的最简单的例子是

import scala.concurrent._
import scala.concurrent.ExecutionContext.Implicits.global

import org.scalatest.WordSpecLike
import org.scalatest.concurrent._

class FutureSpec extends WordSpecLike with Futures {
  "A future" must {
    "be a valid argument for whenReady" in {
      val fut = future { 42 }
      whenReady(fut) { res => s should be 42 }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

那不编译

  • 类型不匹配; 发现:scala.concurrent.Future [Int] required:FutureSpec.this.FutureConcept [?]
  • ';' 预期,但发现整数字面量.

我应该做些什么呢?

Mar*_*ijn 24

我发现隐含的转换存在于ScalaFutures,而不是在Futures.类声明应该是

class FutureSpec extends WordSpecLike with ScalaFutures
Run Code Online (Sandbox Code Playgroud)

除此之外,还有其他一些错误.FutureSpec也应该Matchers混入,并且res => s是一个愚蠢的错字,应该是res => res