失败案例返回类型为Java void的模式匹配

时间:2014-10-17 16:22:41

标签: scala testng

在我的测试中,我的代码如下:

val myVar = getVar() match {
  case Some(v) => v
  case None => fail() // TestNG
}
// more testing on myVar
...

// TestNG
public static void fail() { ... }

问题是myVar被分配了Any的类型。处理这种情况的最佳方法是什么?

2 个答案:

答案 0 :(得分:6)

首先进行一些设置以匹配您的环境(ish)

scala> def fail(): Unit = throw new RuntimeException("blah")
fail: ()Unit

scala> def getVar(): Option[String] = Some("hello")
getVar: ()Option[String]

现在编写一个返回Nothing而不是Unit

的适配器
scala> def myFail(): Nothing = {fail(); ???}
myFail: Nothing

使用适配器时,代码按预期工作

scala> val myVar = getVar() match {
 | case Some(v) => v
 | case None => myFail()
 | }
myVar: String = hello

顺便说一句,这可以更清晰地写成

scala> val myVar = getVar() getOrElse myFail()
myVar: String = hello

有关单元类型及其与void http://james-iry.blogspot.com/2009/07/void-vs-unit.html的关系的更多信息 有关Nothing类型的更多信息http://james-iry.blogspot.com/2009/08/getting-to-bottom-of-nothing-at-all.html

答案 1 :(得分:1)

我只想添加一个可能的答案。这使用@JamesIry描述的方法,但使用内联部分函数。它具有相同的效果,但有点短。

val myVar = getVar() match {
  case Some(v) => v
  case None => { fail(); ??? } : Nothing
}