亚洲人成网站在线播放2019 _日韩国产欧美精品_久久夜色精品国产欧美乱_在线视频福利一区

當前位置:首頁 > 網(wǎng)站舊欄目 > 學(xué)習(xí)園地 > 設(shè)計軟件教程 > 使用EUnit進行單元測試

使用EUnit進行單元測試
2010-01-13 23:17:42  作者:  來源:
為了寫一個好的產(chǎn)品,必定離不開完善的測試。

最近開始籌劃項目,因此單元測試必不可少,一定要在開始的時候把測試做好,從下到上才能讓產(chǎn)品更加堅固。

我們選擇使用EUnit進行單元測試。使用Eunit的好處:減少代碼的修改;提高開發(fā)速度;有利于接口與實現(xiàn)分離;有利于系統(tǒng)集成;還有測試本身可以作為一種文檔。

1,首次從http://support.process-one.net/doc/display/CONTRIBS/EUnit 獲取對應(yīng)的SVN checkout路徑,http://svn.process-one.net/contribs/trunk/eunit,通過svn進行下載。

2,將整個eunit目錄放到你的erlang安裝目錄下的lib目錄中。也可以使用通過code:add_path/1或者其他編譯選項指明eunit的路徑,但是不是很方便。

3,在你的module中添加: -include_lib("eunit/include/eunit.hrl"). 這樣就引入了eunit的頭文件,此時你的module具有了下面的特性:自動的將以"_test"結(jié)尾的函數(shù)作為測試函數(shù);為你的module添加并導(dǎo)出了test/0函數(shù);為你提供了豐富的test macro。(自動導(dǎo)出test函數(shù),是通過compile指示符的parse_transform選項進行處理)

此時,我們的module已經(jīng)具有了eunit賦予的一切權(quán)利。注意你從svn下載的代碼,沒有進行編譯,你需要進行編譯生成beam文件。由于本人是在windows下工作,編譯不是很方便,所以我就直接從這里下載了eunit的beam文件,放到eunit/ebin/目錄下。

在我們要測試的module中我們加入一個函數(shù):
Erlang代碼 復(fù)制代碼
  1. basic_test() ->   
  2.      ?assert(1 == 1).  


好了,編譯module,隨后運行M:test(),進行單元測試,我們會看到
Test successful.
的提示。測試ok。

這里bsic_test/0會在執(zhí)行test/0的時候調(diào)用,我們也可以把basic_test/0寫成另一種形式:
Erlang代碼 復(fù)制代碼
  1. basic_test_() ->   
  2.     fun() -> ?assert(1 == 1) end.  


以"_test_"結(jié)尾的函數(shù),在EUnit中稱為“test generation function",測試生成函數(shù),
它返回一個或一個函數(shù)list,EUnit會依次執(zhí)行每個函數(shù)。為了讓代碼更緊湊簡潔,
我們又有了另一個macro:_test,這樣上面的test可以變成這樣:

Erlang代碼 復(fù)制代碼
  1. basic_test_() ->   
  2.     ?_test(?assert(1 == 1)).  


是不是代碼少一些了?好的讓我們再進一步,我們使用另一個macro:_assert:
Erlang代碼 復(fù)制代碼
  1. basic_test_() ->   
  2.     ?_assert(1 == 1).  


怎么樣,很簡單了吧,好的,比如我有一系列的內(nèi)容要測試,我就可以簡單的寫成這樣:
Erlang代碼 復(fù)制代碼
  1. basic_test_() ->   
  2.     [?_assert(1 == 1),   
  3.      ?_assert(2 == 2),   
  4.      ?_assertEqual(33),   
  5.      ?_assertMatch(4,  4),   
  6.      ?_assertException(throw, a, throw(a))].  


我們非常容易的就測試了某個表達式是否為true,某兩個值是否相等assertEqual
(注:這里使用=:=進行判斷,因此assertEqual(3, 3.0)不會測試通過),
某個表達式是否匹配,是否產(chǎn)生指定的異常等。
好了,暫時就這些基本的東西,更多的內(nèi)容查看EUnit的幫助:
http://svn.process-one.net/contribs/trunk/eunit/doc/overview-summary.html

Update:
R12B-5中,eunit作為一個標準的lib被加入,eunit中提供了一些有用的Macro,如:
LET(Var,Arg,Expr)
等效于 (fun(Var) -> (Expr) end)(Arg)
用法: L = ?LET(L1, [1, 2, 3], lists:reverse(L1))

IF(Cond,TrueCase,FalseCase)
用法: G = ?IF(A >= B, A, B)

形如_test()的函數(shù),作為一個test 單元
形如_test_()的函數(shù)作為test generator,其用來產(chǎn)生test單元,其結(jié)尾表達式可以為:
單個形如?_xxx的測試,表示一個test單元
也可以為一個List(可以為Deep List),List進行flatten后,長度表示test單元數(shù)目如下面代碼表示五個測試單元:

Erlang代碼 復(fù)制代碼
  1. basic_test() ->   
  2.     ?assert([12] = lists:reverse([21]).   
  3.   
  4. basic_test_() ->   
  5.     [?_assert(true),   
  6.      ?_assertNot(false),   
  7.      [ ?_assert(1 == 1.0),   
  8.        ?_assert(true)   
  9.      ]   
  10.     ].  

安徽新華電腦學(xué)校專業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線咨詢
亚洲人成网站在线播放2019 _日韩国产欧美精品_久久夜色精品国产欧美乱_在线视频福利一区
男女视频一区二区三区| 欧美 国产 日本| 久久久av免费| 少妇久久久久久| 久久99蜜桃综合影院免费观看| 久久久综合av| 日韩在线中文字| 国产精品爽爽爽爽爽爽在线观看| 久久天天躁狠狠躁夜夜爽蜜月| 国产精品丝袜高跟| 欧美xxxx14xxxxx性爽| 国产精品丝袜久久久久久不卡 | 国产精品久久久久久久久粉嫩av| 日韩中文字幕网| 国产精品视频免费在线观看| 国产精品久久精品视| 久久这里只有精品99| 欧美精品成人91久久久久久久| 在线观看av的网址| 视频一区视频二区视频三区视频四区国产| 天堂av在线中文| 欧美在线日韩精品| 国产又粗又长又爽视频| 国产在线98福利播放视频| 国产精品亚洲欧美导航| 久久久亚洲天堂| 久久精品欧美视频| 欧美激情小视频| 午夜精品一区二区三区av | 国产精品久久久久一区二区| 欧美精品在线极品| 无码中文字幕色专区| 人人干视频在线| 国产日韩在线看| 91精品国产综合久久香蕉最新版| 久久成人资源| 欧美成年人在线观看| 亚洲精品一区二区三区蜜桃久 | 国产免费一区二区三区视频| 久久一区二区三区欧美亚洲| 久久精品一本久久99精品| 精品国产91亚洲一区二区三区www| 亚洲国产精品久久久久婷蜜芽| 日本在线观看a| 国产在线一区二| 久久亚洲午夜电影| 精品免费久久久久久久| 日本在线观看a| 国产伦精品一区二区三区视频黑人 | 国产一区二区三区免费不卡| 91超碰中文字幕久久精品| 久久精品视频va| 亚洲精品欧美极品| 国产中文日韩欧美| 国产成人精品久久亚洲高清不卡| 国产精品福利视频| 日本人妻伦在线中文字幕| 国产伦精品一区二区三区照片91| 久久精品国产一区二区三区| 欧美一区二区三区四区夜夜大片 | 色久欧美在线视频观看| 久久久久久91| 欧美亚洲免费在线| 99视频免费观看| 国产精品成人国产乱一区| 大地资源第二页在线观看高清版| 国产乱码一区| 国产精品久久久久久五月尺| 欧美中文字幕在线播放| 国产高清www| 亚洲欧洲日韩精品| 高清视频欧美一级| 精品国产无码在线| 精品视频一区二区在线| 国产成人精品一区二区三区福利| 视频在线99| 成人精品一区二区三区电影黑人| 国产精品精品国产| 激情欧美一区二区三区中文字幕| 国产成人97精品免费看片| 亚洲免费视频一区| 成人av网站观看| 九九精品在线视频| 国产一区自拍视频| 国产精品免费成人| 欧美精品在欧美一区二区| 国产高清在线一区| 亚洲高清精品中出| 91久久久久久久久| 亚洲国产精品女人| 久久久女人电视剧免费播放下载| 在线码字幕一区| 97碰在线视频| 五月天在线免费视频| 国产精品18久久久久久麻辣 | 人妻内射一区二区在线视频| 久久精品国产一区二区三区日韩| 日本在线视频www色| 久久96国产精品久久99软件| 日韩精品―中文字幕| 久久久国产成人精品| 黄色一级片播放| 国产精品第100页| 国产青春久久久国产毛片| 久久成人在线视频| 国产精品综合久久久久久| 亚洲综合激情五月| 久热国产精品视频一区二区三区| 日韩福利一区二区三区| 日韩中文字幕国产精品| 国产最新精品视频| 宅男一区二区三区| 国产黄色片免费在线观看| 热99精品只有里视频精品| 国产精品日韩欧美综合| 国产欧美日韩中文字幕| 亚洲在线观看一区| 国产黄页在线观看| 蜜桃传媒一区二区| 国产999视频| 久久综合中文色婷婷| 黄色一级在线视频| 亚洲日本无吗高清不卡| 久久精品国产精品亚洲色婷婷| 麻豆av一区二区| 亚洲成色www久久网站| 日韩在线视频一区| 国产精品夜间视频香蕉| 日本国产在线播放| 国产精品福利久久久| 97人人模人人爽人人喊38tv | 国产精品日本一区二区| 国产精品一区二区久久久久| 色综合视频二区偷拍在线| 久久久www成人免费精品| 成人精品视频久久久久| 热草久综合在线| 久久久久国产精品www| 日韩在线免费高清视频| 国产乱人伦精品一区二区三区| 日本阿v视频在线观看| 欧美成人精品在线| 国产不卡在线观看| 国产伦精品一区二区三区视频免费 | 日韩欧美一区二| 欧美日韩国产成人在线| 久久国产精品99久久久久久丝袜| 国产日韩精品视频| 日韩免费毛片| 一区二区免费在线视频| 国产精品网站大全| 久久久精品国产网站| 精品日本一区二区三区| 亚洲wwwav| 国产精品免费在线免费| 国产麻豆电影在线观看| 久久草视频在线看| 日韩中文字幕在线免费观看| 国产精品一区二区免费看| 日韩欧美手机在线| 中文字幕精品一区日韩| 国产精品视频内| 久久大香伊蕉在人线观看热2| 成人免费毛片在线观看| 欧美国产视频在线观看| 日本香蕉视频在线观看| 亚洲一区二区三| 欧美激情第1页| 久久这里只有精品99| 国产传媒欧美日韩| 91精品国产综合久久久久久丝袜 | 久久久精品久久久久| 国产精品 日韩| 97色在线播放视频| 成人av在线网址| 国产精品自拍视频| 国产欧美精品一区二区三区介绍| 欧美 日韩 国产 在线观看| 日韩精品第一页| 色哺乳xxxxhd奶水米仓惠香| 欧美激情图片区 | 99久久国产免费免费| 国产精品一区二区三区在线播放| 国产一区二区自拍| 国产在线视频欧美一区二区三区| 蜜桃网站成人| 国产午夜福利视频在线观看| 精品视频免费在线播放| 国产一级片黄色| 国产日韩三区| 国产精品一区视频网站| 高清不卡日本v二区在线| 精品一卡二卡三卡四卡日本乱码| 欧美激情视频一区二区三区| 欧美亚洲丝袜| 国内精品400部情侣激情| 蜜桃免费区二区三区| 国产又黄又大又粗视频| 国产九九精品视频| 91精品国产自产91精品|