2

刚开始使用 Scala 进行单元测试,对 Scala 中如何处理异常感到完全困惑。下面是一个 JUnit 测试的示例。

class Test {
  @Test
  void someTest {
    try {
      //Something
    } catch(Exception e) {
      Assert.assertTrue(e.getCause() instanceOf IOException);
    }
  }
} 

现在我想在 Scala 中做同样的事情,我试过了

class Test {
  @Test def someTest {
    try {
      //Something
    } catch {
      case e: Exception => assertTrue(e.getCause().isInstanceOf[IOException])
    }
  }
}

但是我的 IDE 一直在抱怨Method Apply is not a member of type Any。我阅读了 Scala 中的异常处理,发现您应该使用模式匹配器,并且Scala 中没有异常处理。这究竟是如何工作的?

4

1 回答 1

4

如果您正在测试 scala 代码,我建议使用比 jUnit 更高级的东西,例如ScalaTest

import java.io.IOException

import org.scalatest._
import org.scalatest.FlatSpec
import org.scalatest.matchers.ShouldMatchers

object SomeCode
{
    def apply() = {
        throw new IOException
    }
}

class SomeTest
  extends FlatSpec
  with ShouldMatchers
{
    "Something" should "throw an IOException, TODO: why ?" in
    {
        intercept[IOException] {
            SomeCode()
        }
    }

    it should "also throw an IOException here" in
    {
        evaluating { SomeCode() } should produce [IOException]
    }
}

nocolor.run( new SomeTest )
于 2012-08-08T05:01:15.610 回答