我正在学习如何使用scalatest进行单元测试,但我有一些基本问题,因为我正在学习Scala / Scalatest 我写了一个scala脚本,它有一个带有几个方法的scala对象。我的问题如下:我应该为整个Scala对象编写一个单元测试,还是应该为每个函数编写一个测试。 例如,我写了以下函数: 你知道如何使用scala测试为这个特定的函数编写测试:
def dataProcessing (input: List[String]) = {
val Data = input.map(_.trim).filter(x => !(x contains "$")).filter(line => Seq("11", "18").exists(s => line.contains(s))).map(elt => elt.replaceAll("""[\t\p{Zs}\.\$]+""", " ")).map(_.split("\\s+")).map(x => (x(1),x(1),x(3),dataLength(x(3)),dataType(x(3))))
return Data
}
最后,我尝试使用测试驱动的设计最佳实践,但仍然不知道在编写代码之前如何继续编写测试,任何提示如何继续遵守这些实践。
非常感谢
答案 0 :(得分:2)
通常,在定义类或对象时,应该为使用该类的人调用的方法编写测试,其他方法应该是私有的。如果您发现自己想要公开方法,那么可以测试它们,考虑将它们移动到单独的类或对象中。
scala测试支持很多测试样式。就个人而言,我喜欢WordSpec
。正在进行的基本测试如下所示:
class MyTest extends WordSpec with Matchers {
"My Object" should {
"process descriptors" when {
"there is one input" in {
val input = List("2010 Ford Mustang")
val output = MyObject.descriptorProcessing(input)
output should have length 1
output.head shouldBe()
}
"there are two inputs" in pendingUntilFixed {
val input = List("Abraham Joe Lincoln, 34, President",
"George Ronald Washington, 29, President")
val output = MyObject.descriptorProcessing(input)
output should have length 2
output.head shouldBe()
}
}
"format descriptors" when {
"there is one input" in pending
}
}
}
我使用了scalatest的两个功能来启用TDD,pendingUntilFixed
和pending
。
pendingUntilFixed
可让您为尚未实施或尚未正常使用的代码编写测试。只要测试中的断言失败,测试就会被忽略并以黄色输出显示。一旦所有断言都通过,测试就会失败,让您知道可以打开它。这启用了TDD,同时允许您的构建在工作完成之前通过。
pending
是一个标记说"我要为此写一个测试,但我还没有到达它#34;。我经常使用它,因为它允许我为我的测试编写一个大纲,然后返回并填写它们。