F#开发和单元测试?

我刚刚开始使用F#,这是我的第一个函数式语言。 我一直准C#专用,并且非常享受F#如何让我重新思考如何编写代码。 我发现有一点让人迷惑,就是编写代码的过程发生了变化。 我现在已经在C#中使用了TDD多年,并且非常感谢有单元测试知道我在哪里。

到目前为止,我使用F#的过程一直是编写一些函数,使用交互式控制台与他们一起玩,直到我“合理地”确定他们工作,并调整和合并。 这在欧拉项目等小规模问题上效果很好,但我无法想象以这种方式构建大型项目。

人们如何进行单元测试并为F#程序构建测试套件? 是否有相当于TDD? 任何指针或想法的赞赏。


测试驱动的开发人员应该在F#等函数式语言中感受到家的感觉:赋予确定性可重复结果的小函数非常适合单元测试。 F#语言中还有一些功能可以帮助编写测试。 以对象表达式为例。 您可以非常轻松地编写用于输入接口类型的函数的假货。

如果有的话,F#是一流的面向对象语言,您可以使用在C#中使用TDD时使用的相同工具和技巧。 还有一些针对F#编写的测试工具:

  • NaturalSpec
  • FsCheck
  • FsTest
  • FsUnit
  • Matthew Podwysocki在函数式语言中编写了一系列关于单元测试的系列文章。 鲍勃叔叔还在这里写了一篇发人深思的文章。


    我使用NUnit,它不会让我难以阅读或繁重写作:

    open NUnit.Framework
    
    [<TestFixture>]
    type myFixture() = class
    
        [<Test>]
        member self.myTest() =
           //test code
    
    end
    

    因为我的代码是F#和其他.Net语言的混合体,所以我喜欢我在F#和C#中以基本相同的方式编写单元测试并使用类似的语法来编写测试。


    看看F#的自动测试工具FsCheck ,基本上是Haskell的QuickCheck的一个端口。 它允许您以函数或方法应该满足的属性的形式提供程序规范,并且FsCheck会测试该属性在大量随机生成的情况下是否存在。

    FsCheck CodePlex页面

    FsCheck作者页面

    链接地址: http://www.djcxy.com/p/80861.html

    上一篇: F# development and unit testing?

    下一篇: How to get last items of infinite list concatenated with finite list in Haskell?