11.2 测试函数式代码

无论是函数式编程,还是其他范式,都不可能完全消除错误,或阻止在修改现有代码时引入错误,这就是普遍采用单元测试背后的原因之一。好消息是,测试C# 代码时,使用的单元测试技术的大多数也都适用于F# 程序;而且,在许多方面,函数式编程和F# 的测试更容易。

为F# 选择单元测试框架

正如我们在第九章所看到的,可以用F# 写标准的类,因此,任何.NET 的单元测试框架也一样适用于 F#。那么,我们为什么要把F# 中的单元测试写成类的成员,而不是简单的使用有let 绑定的函数声明呢?类当然有好处,比如,代码可以进行复杂的安装和拆卸;然而,我们写的大多数单元测试,可能受益于使用最简单的语法。

在这一章,我们将使用xUnit.net 框架,它使用标准的F# 函数和F# 类。用let 绑定写的F# 函数,会编译成类的静态方法;当我们把代码包装到模块内,模块的名字就成为静态类的名字,否则,F# 就根据文件名生成类。xUnit.net 框架支持实现为静态方法的单元测试,不需要应用特殊的特性(比如,TestFixture)到这个类,这对F# 程序员更友好。如果还没有安装xUnit.net,可以从http://www.codeplex.com/xUnit得到最新的版本。其他单元测试框架的运行也类似,但xUnit.net 是第一个提供了与F# 的平滑整合。

到目前为止,我们讨论的测试,通常只检查在F# Interactive 控制台写好代码后,是否能够立即运行。如果你是单元测试的老手,可能一直在思考测试不能复制,很难再运行。好吧,让我们来看看如何把这种测试演变成单元测试。

时间: 2024-08-24 16:22:43

11.2 测试函数式代码的相关文章

写可测试的代码

任何一个软件都是可以测试.在某种意义上,用户的使用过程也就是一个软件测试的过程.可是这并不是我们今天要讲的可测试性.我们讲的可测试性指的是代码的可测试性,通俗点儿说就是是一串代码里包含的逻辑是不是可以被单元测试所覆盖.在这篇文章里我会从单元测试的基本概念开始引伸到如何写单元测试,如何写可单元测试的代码.文章里所有的例子都是C#写的,一来它是我职业生涯的主力语言.二来C#广为人知,相信对广大职业的或是业余的程序员来说读懂C#的代码不会是什么特别困难的事情.实际上我描述的方法和概念并不会局限于C#或

大数据量分页存储过程效率测试附代码

在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下,哪种分页算法效率最优呢?我们不妨用事实说话. 测试环境 硬件:CPU 酷睿双核T5750  内存:2G 软件:Windows server 2003    +   Sql server 2005 OK,我们首先创建一数据库:data_Test,并在此数据库中创建一表:tb_TestTable 按 Ctrl+C 复制代码1create database data_Test --创建数据库data_Test 2GO 3use data

测试C++代码与WebBrowser HTML的互动

testWebBrowserDlg.h // testWebBrowserDlg.h : 头文件 // #pragma once #include "explorer1.h" #import "C:\windows\system32\mshtml.tlb" // location of mshtml.tlb #include <map> #include <comdef.h> #include <mshtml.h> #includ

checkbox全选/全不选/反选(jQuery v1.11.3测试通过)

主要功能: 方式一:使用三个按钮(全选.全不选 .反选)控制checkbox的选择.(实际可能全选/全不选共用按钮,这里没做) 方式二:使用一个主控checkbox用于控制其他checkbox的选择状态,同时受控checkbox是否全选也反馈给主控checkbox(这里有两种方式实现).   以下代码及实现效果在jQuery v1.11.3测试通过!2015/07/18! 测试效果:   代码: <!-- ---------------------------------------------

第十一章 重构和测试函数式程序

第十一章重构和测试函数式程序 本章介绍 ■重构函数式程序 ■使用不变性推理代码 ■为 F# 程序写单元测试 ■使用延迟值缓存结果 这本书的主题之一就是,函数编程理如何使解代码更容易理解,只需要通过阅读就可以:特别是在需要修改陌生程序,或者通过组合现有函数实现行为,或者重构现有的代码时,尤为重要.函数式编程更容易重构,缘于清晰度和模块化:可以改善代码,并且有信心这种改变不会破坏程序的其他部分. 正如在函数式编中的很多事情一样,修改代码而不改变其含义的思想,与数学密切相关,因为不改变表达式含义的操作

关于单元测试,如何写出可测试的代码?

单元测试在一个完整的软件开发流程中是必不可少的.非常重要的一个环节.通常写单元测试并不难,但有的时候,有的代码和功能难以测试,导致写起测试来困难重重.因此,写出良好的可测试的(testable)代码是非常重要的.接下来,我们简要地讨论一下什么样的代码是难以测试的,我们应该如何避免写出难以测试的代码,以及要写出可测试性强的代码的一些最佳实践. 什么是单元测试(unit test)? 在计算机编程中,单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进

编写难于测试的代码的5种方式

本文由码农网 – 孙腾浩原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 有一次,我在一个讲座上听到主持人问听众如何故意编写难于测试的代码.在场的小伙伴都惊呆了,因为没有任何人会故意写这种糟糕的代码.我记得他们甚至给不出一个好的答案. 当然,这个问题的目的不在于教大家如何写使同事欲哭无泪的烂代码.而是为了了解什么样的代码难于测试,来避免这些严重的问题. 这里给出我对上面那个问题的答案(当然这只是我的个人观点,每个人讨厌的都不尽相同.) 1.用大量的静态字段 尤其是在不同类中共享静

vs2010中使用Nunit测试c#代码结果的正确性

http://www.nunit.org/index.php?p=download 上面地址下载,有安装版的,有直接解压版的,只有里面的nunit.framewor.dll就可以做简单的测试了. 安装版的路径默认为:C:\Program Files \NUnit 2.6\bin\framework\nunit.framewor.dll 从vs2010中直接下载安装插件: 安装完后提示重启vs,然后就可以打开用了,在视图中可以打开: 然后写好测试代码之后,就能够看到结果,不对的话会有相应的错误..

java 编程思想 22.11: java bean 案例代码

java 编程思想  22.11:   java bean 案例代码 thinking in java 4免费下载:http://download.csdn.net/detail/liangrui1988/7580155 package org.rui.swing.bean; import java.awt.Color; import java.awt.event.ActionListener; import java.awt.event.KeyListener; import org.rui.