SBT中的基本测试功能

dsg*_*dsg 7 unit-testing sbt

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

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

ExampleSbtTest教程似乎做了比我需要的更复杂的事情,我在SBT GoogleCode页面上找不到更简单的东西.

Ste*_*fen 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项目.切换到自动创建的项目文件夹并创建新的构建文件夹

# cd [your-project-root]/project
# mkdir build
Run Code Online (Sandbox Code Playgroud)

更改为新创建的构建文件夹,并使用以下内容创建第一个项目构建文件Project.scala:

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

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

}
Run Code Online (Sandbox Code Playgroud)

因为对于0.7,测试文件夹是自动创建的,所以您可以立即开始编写第一个测试.跳到"创建简单测试"段落.

定义SBT 0.10的依赖性

对于0.10,可以使用sbt控制台添加依赖项.只需在项目目录中启动sbt并输入以下命令:

set libraryDependencies + ="org.scala-tools.testing"%%"scalacheck"%"1.9"%"test"session save

然后,您可以关闭sbt控制台并查看项目build.sbt文件.您可以轻松地发现上面的libraryDependencies行被添加到您的项目快速配置中.

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

# cd [project-root]
# mkdir -p src/test/scala
Run Code Online (Sandbox Code Playgroud)

这就是开始使用0.10所需要的一切.此外,关于使用0.10进行测试的文档远比旧版本详细.有关更多详细信息,请参阅测试维基页面.

创建一个简单的scalacheck测试

创建以下测试文件src/test/scala/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
    )
}
Run Code Online (Sandbox Code Playgroud)

如前所述,对于"concat"规范,这个基本检查将失败,但这是开始测试和sbt所需的基本测试步骤.如果要使用其他测试框架,只需调整包含的依赖项即可.

运行测试

要运行测试,请打开sbt控制台并键入

> test
Run Code Online (Sandbox Code Playgroud)

这将运行src/test树中存在的所有测试,无论这些测试是基于java还是基于scala的测试.因此,您可以轻松地重用现有的Java单元测试并将它们逐步转换为scala.