10

我正在尝试使用期货为某些东西编写规范,但我不确定我应该如何使用该Futures特征。我必须通过whenReadya FutureConcept,但我找不到如何从 a 构造一个Future。文档内容如下:

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

据我了解,我必须编写 aFuture和 a之间的隐式转换FutureConcept(这对我来说似乎是错误的,因为它似乎应该是样板文件,但这是我唯一能做到的)。我不知道该怎么做,FutureConcept 的文档很容易告诉我

有关此 trait 为使用期货进行测试而提供的语法的详细信息,请参阅 trait Futures 的文档。

让我绕了一圈。我做的最简单的例子是

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 }
    }
  }
}

那不编译

  • 类型不匹配; 发现:scala.concurrent.Future[Int] 需要:FutureSpec.this.FutureConcept[?]
  • ';' 预期但找到整数文字。

我应该做些什么不同的事情?

4

1 回答 1

28

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

class FutureSpec extends WordSpecLike with ScalaFutures

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

于 2013-08-23T12:28:43.420 回答