问题 用TDD学习Scala


我现在正在学习Scala。我看到有两个测试框架,ScalaTest和Specs。我唯一的问题是我还不能用语言来决定哪个更好。 此外,我习惯在代码之前编写测试,目前我还不知道如何在函数式编程中完成它。 理想情况下,我想以TDD方式学习Scala,有没有关于它的资源?


1317
2017-11-16 13:34


起源



答案:


有一个功能性的公案,可能是你正在寻找的东西。 来自Java Posse的Dick Wall开始了一个github项目:

https://github.com/relevance/functional-koans/tree/scala

你需要maven来启动它 mvn package


还有另一个Koan:

http://www.scalakoans.org/

感谢@MikeHoss!


7
2017-11-16 13:54



这个koan thingy对我不太清楚...... :) - Uberto
@uberto,从我可以收集到的,“功能性公案”似乎是你可以做的练习,以学习函数式编程,从而给你一个失败的测试,你必须让它通过。是吗,迈克尔? - Grant Crofton
是的,没错。有一个项目设置与一堆单元测试。要取得进展,您必须更改当前失败的单元测试以使其通过。然后下一个测试失败,你必须学习新的东西。第一次单元测试很简单: assert(false) // should be true - michael.kebe
十分有趣!我会尽力! - Uberto
答案似乎有点过时了 - 我偶然发现了这个: scalakoans.org - MikeHoss


答案:


有一个功能性的公案,可能是你正在寻找的东西。 来自Java Posse的Dick Wall开始了一个github项目:

https://github.com/relevance/functional-koans/tree/scala

你需要maven来启动它 mvn package


还有另一个Koan:

http://www.scalakoans.org/

感谢@MikeHoss!


7
2017-11-16 13:54



这个koan thingy对我不太清楚...... :) - Uberto
@uberto,从我可以收集到的,“功能性公案”似乎是你可以做的练习,以学习函数式编程,从而给你一个失败的测试,你必须让它通过。是吗,迈克尔? - Grant Crofton
是的,没错。有一个项目设置与一堆单元测试。要取得进展,您必须更改当前失败的单元测试以使其通过。然后下一个测试失败,你必须学习新的东西。第一次单元测试很简单: assert(false) // should be true - michael.kebe
十分有趣!我会尽力! - Uberto
答案似乎有点过时了 - 我偶然发现了这个: scalakoans.org - MikeHoss


所以,测试框架。有 其他问题 关于这一点,虽然我想指出也有 ScalaCheck。 ScalaCheck不像Specs和ScalaTest那样功能齐全,但另一方面,两者兼而有之 眼镜 和 ScalaTest 可以与它整合。

就个人而言,我宁愿选择ScalaCheck,这可能与您习惯的单元测试框架有很大不同。这种差异可以很好地防止您以面向对象的方式陈述测试。

现在,主要关注你的问题:是否有类似TDD的Scala教程?我不知道,尽管如此 回答 关于 功能性的koans 似乎接近你想要的。


2
2017-11-16 16:25



我发现scalacheck对于算法和单个单元的低级别调整更有用,但对BDD和更高级别的规范没那么有用。 - Kevin Wright
@Kevin然后你没有正确地建立发电机! :-) - Daniel C. Sobral


也许这会对你有所帮助。这是堆栈溢出的另一个成员发出的类似请求。

单元测试Scala


1
2017-11-16 13:38



那里也没有真正的水壶...... - Uberto


ScalaTest是两个框架中功能更丰富,更灵活的。

话虽如此......我目前偏爱Specs,他们似乎在更好地跟上最新的Scala版本并且IntelliJ集成似乎也更好。

对于您来说,Specs还有一个优势,即可以学习更小的API。


1
2017-11-16 13:51



在2.8出来后,ScalaTest 1.2发布了最终版本,与Scala 2.8一起使用效果很好。 Kevin不知道ScalaTest 1.2是否适用于Scala 2.8。 ScalaTest 1.3也适用于Scala 2.8,是截至2011年3月20日的当前版本。 - Bill Venners
在我写这个答案的时候,我最近一直在与很多2.8版本候选人合作,这些规范正在密切跟踪。我还记得因为ScalaTest依赖而无法更新项目的挫败感。从那时起,ScalaTest开始通过Maven跟踪自己的依赖关系,因此快速发布应该是可能的,我不认为这会影响我的未来(方便知道,2.9.0即将发布候选版本) - Kevin Wright