升级到最新版本后,Specs2规范无法编译

时间:2013-11-29 14:17:27

标签: unit-testing scala compiler-construction type-inference specs2

我刚刚在我的项目中升级了Specs2,现在有些规格无法编译,不清楚为什么它们不是,这是规范:

"fail validation if a connection is disconnected" in {

  val connection = factory.create

  awaitFuture(connection.disconnect)

  factory.validate(connection) match {
    case Failure(e) => ok("Connection successfully rejected")
    case Success(c) => failure("should not have come here")
  }

}

(可以看到整个文件here

编译器说:

  

无法找到类型的证据参数的隐含值   org.specs2.execute.AsResult [具有Seri​​alizable的产品]       “如果连接断开连接,验证失败”{                                                         ^

虽然我明白这是什么意思,但由于我正在回复okfailure并且我在我的比赛中报道所有案例,因此没有任何意义。

知道这里有什么不对吗?

1 个答案:

答案 0 :(得分:8)

编译器正在尝试查找2个匹配分支的公共类型。第一行使用ok MatchResult,第二行使用failure,返回Result。他们唯一常见的类型是Product with Serializable

修复只是使用ok ko的相反值:

factory.validate(connection) match {
  case Failure(e) => ok("Connection successfully rejected")
  case Success(c) => ko("should not have come here")
}

你也可以写

import org.specs2.execute._

...

factory.validate(connection) match {
  case Failure(e) => Success("Connection successfully rejected")
  case Success(c) => failure("should not have come here")
}

但是,没有success(message: String)方法可用于匹配相应的failure。我将它添加到下一个specs2版本以获得更好的对称性。