SBT中的基本测试功能

时间:2011-06-05 02:39:12

标签: unit-testing sbt

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

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

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

1 个答案:

答案 0 :(得分:12)

使用SBT进行测试

无论您想使用哪个版本的SBT,基本上您都必须执行以下步骤:

  1. 在项目配置中包含所需的测试框架作为测试依赖项。
  2. 在源代码树中创建一个专用的测试文件夹,通常是 src / test / scala ,如果它不存在的话。
  3. 一如既往:写下您的测试,规格......
  4. 这些基本步骤对于sbt 0.7分支(来自google-code的分支)和当前的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
    

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

    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并输入以下命令:

      

    set libraryDependencies + =“org.scala-tools.testing”%%“scalacheck”%“1.9”%“test”   会话保存

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

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

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

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

    创建一个简单的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
        )
    }
    

    如前所述,对于“concat”规范,此基本检查将失败,但这是开始测试和sbt所需的基本测试步骤。如果你想使用另一个测试框架,只需调整包含的依赖项。

    运行测试

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

    > test
    

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