Scala 如何测试异常

几年前整理过一篇 JUnit 4 如何正确测试异常,类似的问题:如何在 Scala 中测试异常呢?因 Scala 可以完全采用 JUnit 测试用例的风格,所以当然可以运用 Java 的三种方式来测试异常,即

  1. try { 待测试代码; fail() } catch(某种异常) {断言}
  2. @Test(expected = Exception.class)
  3. @Rule

回到 Scala 中来,我并不那么情愿在 Scala 中使用 JUnit 的 @Test def testMethod() 这样的测试方法风格,而多少采用 BDD 或者叫更 DSL 的风格。

那看看我们 Scala 有些什么独到的异常测试方法

一: intercept

测试结果

scala-intercept

打开 intercept 方法的源码,其实这就是 try-catch 的方式。intercept 方法的源码如下:

intercept() 方法返回的是当前抛出的异常,所以可以对它的返回值进行更详细的断言

二:thrownBy

执行之后的描述信息是

也就是 in {} 中的执行代码从描述信息并没有帮助,虽然它看上去很美。

thrownBy 的实现方式与 intercept 是一样的。

第一代 specs 可以用 throwA/throwAn 方法,现在转到  specs2 了,specs 已停止开发,从 https://code.google.com/p/specs/ 找了个例子:

Scala 使用 Java 的风格与 JUnit 4 如何正确测试异常 中的用法基本一致的。try-catch 方式也只是存在语法上的差异

总之,Scala 风格的异常测试也就是 intercept 和 thrownBy 两种。

参考:1. ScalaTest
          2. specs

本文链接 https://yanbin.blog/scala-how-to-test-exception/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments