• 2010-08-23

    搭建Scala工程——测试

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.blogbus.com/dreamhead-logs/73609525.html

    作为一个ThoughtWorker,缺少测试会让我内心充满不安,面对Scala也不例外。书接上文。有了Buildr,在工程里组织测试也很容易。

    具体了解之前,先来看看Scala的测试框架。《Programming Scala》中介绍了JUnit和ScalaTest,其中ScalaTest是个纯粹的Scala的框架。不过,书中只介绍了非常基本的用法。如今,ScalaTest已然变化了许多。

    ScalaTest支持很多种测试风格,从最传统的Assert到BDD,再到FDD。所以,选择ScalaTest,先要选择一种风格,以便统一,至少在同一类测试中应该遵循同一种风格。即便是选择了一条路,有时,也会有分叉路。比如BDD,有三种风格可选SpecWordSpecFlatSpec

    Spec是受Ruby的Rspec影响而产生的,用过Rspec的人,看到describe、it这样的字眼会倍感亲切。WordSpec的灵感来自specs——另一个Scala测试框架,字符串放在前面让这个DSL看上去更有感觉。如果不喜欢太多缩进,那FlatSpec是个另外一个选择。

    选择太多未必是件好事,作为一个团队,将风格统一是最重要的。ScalaTest让人想起了C++,够强大,但选择太多,花了大量精力学习之后,才会发现很多东西应该避免混合使用。

    Buildr对Scala提供了内建的支持,只要我们把代码放到src/test/scala即可。下面是一个采用了Spec风格编写的测试:
    import org.scalatest.Spec
    import org.scalatest.matchers.ShouldMatchers

    class AddSuite extends Spec with ShouldMatchers {
      describe("plus") {
        it("should return 2 for 1 plus 1") {
          1 + 1 should be === 2
        }
      }
    }
    (src/test/scala/AddSuite.scala)

    然后,运行测试:
      buildr test

    Buildr 1.4.1支持的ScalaTest版本是1.0.1,而ScalaTest的新版已经发布了,如果想采用新版本的ScalaTest可以自行设定版本。
    require 'buildr/scala'

    Buildr.settings.build['scala.version'] = "2.7.7"
    Buildr.settings.build['scala.test'] = '1.1'

    define 'demo' do
      project.version = '0.0.1'
      package :jar
    end
    (buildfile)

    Buildr还对specs提供了内建的支持,只要把代码放到src/spec/scala下。

    分享到:
    引用地址: