如何使用 SBT 为我的应用程序创建一个简单的单元测试的测试功能?
我希望答案是我可以在 src/test/scala
中写入单个文件对于我从 SBT 导入一些特殊测试包的项目,这使得编写测试就像编写单个方法一样简单。
教程ExampleSbtTest似乎正在做比我需要的更复杂的事情,而且我在 SBT GoogleCode 上找不到任何更简单的东西页。
最佳答案
使用 SBT 进行测试
不管你要使用哪个版本的SBT,基本上都要做以下几步:
对于 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/