如何使用SBT的测试功能为我的应用程序创建简单的单元测试?
我希望答案是我可以在src/test/scala
中为我的项目编写单个文件,该项目从SBT导入一些特殊的测试包,这使得编写测试就像编写单个方法一样简单。
教程 ExampleSbtTest 似乎正在做一些比我需要的更复杂的事情,我在SBT GoogleCode页面上找不到更简单的东西。
答案 0 :(得分:12)
使用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项目。转到自动创建的项目文件夹并创建新的构建文件夹
# 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。