码迷,mamicode.com
首页 > 其他好文 > 详细

11.2.1.1 在 F# 交互环境中测试程序

时间:2015-01-08 09:38:46      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:f#   函数编程   实用函数编程   单元测试   xunit   

11.2.1.1 在 F# 交互环境中测试程序

 

我们演示自始至终的整个过程,将使用与前一节PrintLongest 和PrintMultiWord相类似两个函数,但这一次,我们用F# 实现。从清单11.7 中可以看到,我们使用交互式控制台的方式略有不同。

 

清单11.7 使用xUnit.net 交互式测试代码(F# Interactive)

> #if INTERACTIVE                       | [1]

 #r @"C:\ProgramFiles\xUnit\xunit.dll"   | 引用 xUnit.net 库

 #endif                            |

 openXunit;;

 

> let getLongest(names:list<string>)=                 | [2]

     names|> List.maxBy (fun name -> name.Length);;  | 返回最长的地名

val getLongest : list<string> –> string

 

> let test = [ "Aaa"; "Bbbbb";"Cccc" ];;

val test : string list = ["Aaa"; "Bbbbb";"Cccc"]

 

> Assert.Equal("Bbbbb", getLongest(test));; <-- 用 xUnit.net 测试函数

val it : unit = ()

 

首先,我们需要将代码放到一个扩展名为.fs 的文件中,比如Program.fs(相应的.fsx 文件代表交互式脚本),是因为我们想把这个程序编译成.NET 程序集。此外,我们需要添加对xUnit.net 核心库的引用,在Visual Studio 只需使用添加引用对话框就可以了。我们还希望以交互方式运行代码,所以,要在F# Interactive 中加载这个库。我们通常会使用#r 指令,但此指令只允许在F# 脚本(FSX 文件)中使用。幸运的是,F# 支持条件编译,并定义了INTERACTIVE 符号,表示从命令行运行代码,这样,清单的开始部分就能保证[1],不管是否以交互方式运行都能正常工作。

下一步,我们实现从给定列表中找出最长地名的函数[2]。代码很简单,因为使用了F# 库中的高阶函数,这个函数选择给定函数返回大最值的元素。一旦我们有了这个函数,就在接下来的两行进行测试了。最有意义的是[3]行,我们使用了Assert.Equals 方法。这是从xUnit 命名空间导入的,验证实际值(作为第二个参数值)与期望值(第一个参数值)是否匹配。如果不是这种情况,即,结果返回unit,表示测试通过,则,方法将抛出异常。

11.2.1.1 在 F# 交互环境中测试程序

标签:f#   函数编程   实用函数编程   单元测试   xunit   

原文地址:http://blog.csdn.net/hadstj/article/details/42519841

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!