如何使用SBT的测试功能为我的应用程序创建简单的单元测试?SBT中的基本测试功能
我希望答案是我可以在src/test/scala
中为我的项目编写单个文件,该文件从SBT导入一些特殊的测试包,使得编写测试像编写单一方法一样简单。
教程ExampleSbtTest似乎是在做的东西比我所需要的更为复杂,我无法找到任何东西SBT GoogleCode页面上简单。
如何使用SBT的测试功能为我的应用程序创建简单的单元测试?SBT中的基本测试功能
我希望答案是我可以在src/test/scala
中为我的项目编写单个文件,该文件从SBT导入一些特殊的测试包,使得编写测试像编写单一方法一样简单。
教程ExampleSbtTest似乎是在做的东西比我所需要的更为复杂,我无法找到任何东西SBT GoogleCode页面上简单。
测试与SBT
不管你要使用的SBT的版本,基本上你必须执行以下步骤:
这些基本步骤为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。
你使用sbt 0.7还是0.10修改?如果您已经达到0.10,或者如果您考虑切换到0.10,请查看https://github.com/harrah/xsbt/wiki/Testing。而且,你想使用哪个测试框架? – Steffen 2011-06-06 15:11:22
@Steffen - 我相信我在0.7上。我没有绑定到特定的测试框架,因为我没有广泛使用它们。我用过的一点是ScalaCheck。 – dsg 2011-06-07 05:14:02