我刚刚在我的项目中升级了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 [具有Serializable的产品] “如果连接断开连接,验证失败”{ ^
虽然我明白这是什么意思,但由于我正在回复ok
或failure
并且我在我的比赛中报道所有案例,因此没有任何意义。
知道这里有什么不对吗?
答案 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版本以获得更好的对称性。