lee*_*d00 6 tdd erlang f# unit-testing functional-programming
TDD如何与F#和Erlang等功能编程语言进行比较?
我还没有直接使用函数式编程语言,但从我所看到的,你有一个等式的两个方面,他们必须像代数或会计一样平衡; 这似乎有点让人想起TDD,你将期望的输出定义为Assert语句(等式的一边),其余的功能进入与测试分离的类(等式的另一面),除了函数式编程恕我直言似乎有点清洁.
两者实际上是否有相似之处,或者我只是过度思考这一点?
Chr*_*ley 22
他们是正交的.
TDD是一种开发软件的方法,其重点是通过在编写生产代码之前针对规范开发测试来确保正确性.函数式编程是设计和实现软件的范例.
我认为TDD和函数式编程(FP)的不同之处在于TDD是一种方法论而FP是编程范式.
我会说FP在练习TDD时会有所帮助,因为FP鼓励你尽可能确定性.确定性函数比非确定性函数更容易测试.
克里斯说他们是正交的是正确的.但是,函数式编程的某些方面使得函数式程序的测试变得更加容易.
功能程序由函数组成,并保证函数在所有上下文中的行为相同.这意味着当您在单元测试中测试函数时,您知道它将始终以这种方式工作.如果将其插入其他环境,则无需测试它是否有效.
函数接受参数并返回结果,这是他们唯一做的事情.这意味着您通常可以避免模拟和类似的技巧,因为您不需要验证函数是否对某些对象进行某些调用.您只需要验证它是否返回给定参数的预期结果.
最后,还有一些很好的自动工具可用于测试功能程序.对于F#,我们有FsCheck(基于Haskell的QuickCheck).这些受益于功能程序的各种属性.
所以,他们都有不同的目的,本质上是一个不同的东西,但有一些很好的关系(也许像茶和茶壶 :-)他们是完全不同的东西,但工作得很好!)