2011-06-05 45 views
7

如何使用SBT的测试功能为我的应用程序创建简单的单元测试?SBT中的基本测试功能

我希望答案是我可以在src/test/scala中为我的项目编写单个文件,该文件从SBT导入一些特殊的测试包,使得编写测试像编写单一方法一样简单。

教程ExampleSbtTest似乎是在做的东西比我所需要的更为复杂,我无法找到任何东西SBT GoogleCode页面上简单。

+0

你使用sbt 0.7还是0.10修改?如果您已经达到0.10,或者如果您考虑切换到0.10,请查看https://github.com/harrah/xsbt/wiki/Testing。而且,你想使用哪个测试框架? – Steffen 2011-06-06 15:11:22

+0

@Steffen - 我相信我在0.7上。我没有绑定到特定的测试框架,因为我没有广泛使用它们。我用过的一点是ScalaCheck。 – dsg 2011-06-07 05:14:02

回答

12

测试与SBT

不管你要使用的SBT的版本,基本上你必须执行以下步骤:

  1. 包括你想要的测试框架中测试依赖你项目配置。
  2. 在源代码树中创建一个专用的测试文件夹,通常是src/test/scala,如果它不存在的话。
  3. 一如往常:写你的测试,规格...

这些基本步骤为SBT 0.7分支(这是从谷歌代码的一个)和当前SBT 0.10分支相同(现在的开发和记录在github上)。但是,由于0.10提供了0.7中不存在的新快速配置方法,因此如何定义测试依赖关系存在细微差异。

定义为依赖SBT 0.7

这里是你如何创建SBT 0.7的基本测试(基于scalacheck)。通过在空文件夹中调用sbt创建一个新的sbt 0.7项目。换入自动创建项目文件夹,并创建一个新的build文件夹

# cd [your-project-root]/project 
# mkdir build 

变化到新创建的build文件夹,并创建第一个项目构建文件Project.scala与follwing内容:

class Project(info: ProjectInfo) extends DefaultProject(info) { 

    val scalacheck = "org.scala-tools.testing" %% "scalacheck" % "1.9" % "test" 

} 

由于0.7的测试文件夹是自动创建的,您可以立即开始编写第一个测试。跳到“创建简单测试”的段落。

定义为依赖SBT 0.10

0.10一个可以使用SBT控制台添加的依赖。刚开始SBT在你的项目目录,然后输入以下命令:

集libraryDependencies + = “org.scala-tools.testing” %% “scalacheck” % “1.9” % “测试” 会话保存

然后您可以关闭sbt控制台并查看您的项目build.sbt文件。正如你可以很容易地发现上面的LibraryDependencies行被添加到你的项目快速配置。

由于0.10不会自动创建源文件夹。您必须自己创建测试文件夹:

# cd [project-root] 
# mkdir -p src/test/scala 

这就是0.10开始所需的全部内容。而且,有关0.10测试的文档比旧版本更详细。有关更多详细信息,请参阅testing wiki页面。

创建简单scalacheck测试

创建以下测试文件的src /测试/阶/ StringSpecification.scala(从scalacheck主页截取):


import org.scalacheck._ 

object StringSpecification extends Properties("String") { 
    property("startsWith") = Prop.forAll((a: String, b: String) => (a+b).startsWith(a)) 

    property("endsWith") = Prop.forAll((a: String, b: String) => (a+b).endsWith(b)) 

    // Is this really always true? 
    property("concat") = Prop.forAll((a: String, b: String) => 
     (a+b).length > a.length && (a+b).length > b.length 
    ) 

    property("substring") = Prop.forAll((a: String, b: String) => 
     (a+b).substring(a.length) == b 
    ) 

    property("substring") = Prop.forAll((a: String, b: String, c: String) => 
     (a+b+c).substring(a.length, a.length+b.length) == b 
    ) 
} 

如已经指出的本基本检查将失败的“concat”规范,但这是开始测试和sbt所需的基本测试步骤。如果您想使用其他测试框架,只需调整包含的依赖项即可。

运行测试

要运行测试,打开SBT控制台,然后输入

> test 

这将运行目前所有的测试在的src /测试树不管那些基于java或scala的测试。因此,您可以轻松地重用现有的Java单元测试,并将它们逐步转换为Scala。