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)= | [2]
names|> list.maxby (fun name -> name.length);; | 返回最長的地名
val getlongest : list–> 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,表示測試通過,則,方法將丟擲異常。
在C 環境中與Lua進行互動(二)
在c 環境中與lua進行互動 二 1.lua和 c 中型別的對應 nil null string system.string number system.double boolean system.boolean table luainte ce.luatable function luainte ...
在互動式環境中輸入表示式
2 2 4idle 視窗現在應該顯示下面這樣的文字 python 3.3 2 v3.3.2 d047928ae3f6,may 16 2013,00 06 53 msc v.1600 64 bit amd64 on win32 credits or license for more informati...
16 1 5 在 F 中宣告事件
16.1.5 在 f 中宣告事件 為了宣告乙個新事件,需要兩件東西。首先,必須建立乙個可以發布的事件值,以便其他斯可以訂閱新建立的事件。這一次,我們需要使用 f 特有的 ievent t 介面,而不是 net 的 iobservable t 我們還需要一種觸發該事件的方法。在 c 中,可以使用方法呼...