使用测试驱动开发学习Scala

11

我现在正在学习Scala。我看到那里有2个测试框架,ScalaTest和Specs。我的唯一问题是,我还不熟悉这种语言,无法决定哪个更好。 此外,我习惯于在编写代码之前编写测试,在函数式编程中我目前没有清晰的思路如何做到这一点。 理想情况下,我想以TDD方式学习Scala,是否有相关资源?

3个回答

7

@uberto,从我所了解的情况来看,“函数式谜题”似乎是一种可以用来学习函数式编程的练习方法,即你会得到一个失败的测试,然后你需要让它通过。这样说对吗,Michael? - Grant Crofton
是的,正确的。有一个带有一堆单元测试的项目设置。为了取得进展,您必须更改当前失败的单元测试以使其通过。然后下一个测试失败,您必须学习新东西。第一个单元测试是琐碎的:assert(false) // should be true - michael.kebe
真的很有趣!我会尝试的! - Uberto

2

那么,测试框架。关于这个问题有其他问题,但我想指出也有ScalaCheck。ScalaCheck的功能不如Specs和ScalaTest完整,但是,另一方面,SpecsScalaTest都可以与之集成。

就我个人而言,我更倾向于选择ScalaCheck,这可能与你所熟悉的单元测试框架非常不同。这种差异在让你避免以面向对象的方式陈述测试方面可能是有好处的。

现在,回到你问题的主要关注点:是否有类似TDD的Scala教程?我不知道有没有,尽管答案中提到的函数 koans似乎接近你想要的内容。


我发现scalacheck在算法和单元的低级摇摆方面更有用,但对于BDD和更高级别的规范则不太有帮助。 - Kevin Wright
@Kevin 那你可能没有正确地构建生成器! :-) - Daniel C. Sobral

1

ScalaTest是这两个框架中更丰富和灵活的。

话虽如此...我目前更喜欢Specs,它们似乎在跟上最新的Scala版本方面做得更好,而且IntelliJ集成也似乎更好。

对于您来说,Specs还有一个优点,那就是需要学习的API更少。


ScalaTest 1.2在2.8发布后立即发布了最终版本,与Scala 2.8完美兼容。不知何故,Kevin并不知道ScalaTest 1.2可以与Scala 2.8一起使用。截至2011年3月20日,与Scala 2.8兼容的当前版本是ScalaTest 1.3。 - Bill Venners
我写这篇回答时,我最近一直在使用大量的2.8版本候选版,并且非常关注它的规格。我仍然记得由于ScalaTest依赖项的原因而无法简单地更新项目所带来的挫败感。自那以后,ScalaTest开始通过Maven跟踪其自己的依赖关系,因此快速发布应该是可能的,我不认为这会影响我以后的工作(有用的信息,在2.9.0即将推出候选版时要知道)。 - Kevin Wright

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接