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,表示测试通过,则,方法将抛出异常。

时间: 2024-10-05 13:36:02

11.2.1.1 在 F# 交互环境中测试程序的相关文章

python交互环境中导入文件中自定义的函数报错

今天在学习python自定义函数时,遇到一个问题:我用notepad++编辑器自定义的函数,在交互环境下使用from 文件名 import 函数名 导入时,一直报错,检查了好几遍,一直报这个错: 代码如下: # -*-coding:utf-8 -*- #自定义函数 def 函数名(参数1,参数2...): 然后在缩进体内编写函数体,用return返回值 #自定义求绝对值函数 #def my_abs(x): #如果参数类型不是int或者float,会抛出类型错误异常 # if not isinst

11.2.1.2 在 F# 中写单元测试

如果我们以这种方式写直接测试的代码,很容易把它改成单元测试,成为大项目的一个部分.很快,我们将讨论如何用xUnit.net 来实现,但现在,我们要写另一个应由单元测试明确覆盖的调用:用null 值作为参数值,调用getLongest 函数: > getLongest(null);; Program.fs(24,12): error FS0043: The type 'stringlist' does not have 'null' as a proper value 这个,我们在之前还没尝试过,

Sublime Text3配置在可交互环境下运行python快捷键

安装插件 在Sublime Text3下面写代码感觉很不错,但是写Python的时候遇到了一些问题. 用Sublime Text3打开python文件,或者在Sublime Text3下写好python代码,使用快捷键ctrl+b就可以运行了,会在当前窗口的下方出现运行的结果.比如 print("hello world!") 但是,要是使用了input这类需要交互的函数,ctrl+b运行就会出现错误 print("hello world!") x = input(&

分布式环境中,模块数据交互协议分析 (百度brpc)

1. 背景 之前听到同事说,要为自己的模块考虑写个数据协议.今天有空想了一下.写出来,方便后续使用. 开源代码brpc中可以支持多种协议,nshead.redis.mongo等20多种协议. 2. 什么是数据交互协议? 这里说的协议,不是tcp/ip这些网络协议. 在分布式环境中,我们需要将模块的数据通过网络bit流传给上.下游模块,就会涉及到数据完整性.正确性校验. 为了能够校验数据,就需要定义数据交换协议. 3. 代码brpc中的实现 每种协议类型,都需要实现自己的parser类,进行消息的

Kubernetes+Flannel 环境中部署HBase集群

注:目前方案不满足加入新节点(master节点或regionserver节点)而不更改已运行节点的参数的需求,具体讨论见第六部分. 一.背景知识 先看下HBase的组成: Master:Master主要负责管理RegionServer集群,如负载均衡及资源分配等,它本身也可以以集群方式运行,但同一时刻只有一个master处于激活状态.当工作中的master宕掉后,zookeeper会切换到其它备选的master上. RegionServer:负责具体数据块的读写操作. ZooKeeper:负责集

在java开发环境中,快捷键的使用及用法

(1)Ctrl+M切换窗口的大小 (2)Ctrl+Q跳到最后一次的编辑处 (3)F2当鼠标放在一个标记处出现Tooltip时候按F2则把鼠标移开时Tooltip还会显示即Show Tooltip Description.F3跳到声明或定义的地方.F5单步调试进入函数内部.F6单步调试不进入函数内部,如果装了金山词霸200则要把“取关”的       快捷键改成其他的.F7由函数内部返回到调用处.F8一直执行到下一个断点. (4)Ctrl+Pg~对于XML文件是切换代码和图示窗口 (5)Ctrl+

【翻译自mos文章】ABMR:在asm 环境中测试Automatic Block Recover 特性的方法

ABMR:在asm 环境中测试Automatic Block Recover 特性的方法 参考原文: ABMR: How to test Automatic Block Recover Feature with ASM setup (Doc ID 1510090.1) 适用于: Oracle Database - Enterprise Edition - Version 11.2.0.3 and later Information in this document applies to any

Liu Junqiao:生产环境中shell脚本实例

在生产环境中,我们时常要注意主机的各种硬件状态,如果是规模较大的服务集群zabbix等健康工具当然好用,如果只是一些小规模的服务主机,shell就会表现的更灵活,也更适用,今天就和大家分享一个系统巡检脚本! 1 #!/bin/bash 2 3 function system(){ 4 echo "#########################系统信息#########################" 5 OS_TYPE=`uname` 6 OS_VER=`cat /etc/red

在linux oracle 10g/11g x64bit环境中,goldengate随os启动而自己主动启动的脚本

在linux.oracle 10g/11g x64bit环境中,goldengate随os启动而自己主动启动的脚本 背景描写叙述: goldengate安装于/u01/ggs文件夹下 rhel5.5 oracle 10g/11g x64bit Oracle GoldenGate Command Interpreter for Oracle Version 11.1.1.0.0 Build 078 Linux, x64, 64bit (optimized), Oracle 11 on Jul 28