unit-testing - SBT 中的基本测试功能

标签 unit-testing sbt

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

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

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

最佳答案

使用 SBT 进行测试

不管你要使用哪个版本的SBT,基本上都要做以下几步:

  • 在项目配置中包含所需的测试框架作为测试依赖项。
  • 在你的源代码树中创建一个专用的测试文件夹,通常是 src/test/scala,如果它不存在的话。
  • 一如既往:编写您的测试、规范...

  • 对于 sbt 0.7 分支(来自 google-code 的分支)和当前的 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
    

    切换到新创建的构建文件夹并使用以下内容创建您的第一个项目构建文件 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" session save



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

    由于 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。

    关于unit-testing - SBT 中的基本测试功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6240681/

    相关文章:

    python - 如何使用 Tornado 单元测试来测试 "uploading a file"?

    java - 如何使用 Mockito 模拟 void 方法

    Android多模块测试依赖

    c# - Xml 文件未复制到测试输出目录

    scala - 如何配置 sbt 在运行应用程序时加载资源?

    unit-testing - 依赖 dart :html 的单元测试代码

    scalac : Token not found:/Users/mpa/Library/Caches/JetBrains/IntelliJIdea2021. 3/编译服务器/ token /54149

    linux - 在 Scala 中 SBT 被杀死后,不要杀死子进程吗?

    java - 无法在 Play 框架中加载项目

    scala - logback.xml 应该在 SBT/Scala 项目中的哪个项目目录中?