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

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

使用EUnit進(jìn)行單元測(cè)試
2010-01-13 23:17:42  作者:  來(lái)源:
為了寫(xiě)一個(gè)好的產(chǎn)品,必定離不開(kāi)完善的測(cè)試。

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

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

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

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

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

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

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


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

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


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

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


是不是代碼少一些了?好的讓我們?cè)龠M(jìn)一步,我們使用另一個(gè)macro:_assert:
Erlang代碼 復(fù)制代碼
  1. basic_test_() ->   
  2.     ?_assert(1 == 1).  


怎么樣,很簡(jiǎn)單了吧,好的,比如我有一系列的內(nèi)容要測(cè)試,我就可以簡(jiǎn)單的寫(xiě)成這樣:
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))].  


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

Update:
R12B-5中,eunit作為一個(gè)標(biāo)準(zhǔn)的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ù),作為一個(gè)test 單元
形如_test_()的函數(shù)作為test generator,其用來(lái)產(chǎn)生test單元,其結(jié)尾表達(dá)式可以為:
單個(gè)形如?_xxx的測(cè)試,表示一個(gè)test單元
也可以為一個(gè)List(可以為Deep List),List進(jìn)行flatten后,長(zhǎng)度表示test單元數(shù)目如下面代碼表示五個(gè)測(cè)試單元:

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 _日韩国产欧美精品_久久夜色精品国产欧美乱_在线视频福利一区
国产成人亚洲综合青青| 国产免费一区| 少妇精69xxtheporn| 88国产精品欧美一区二区三区| 岛国一区二区三区高清视频| 欧美精品福利在线| 99在线影院| 成人久久精品视频| 国产精品偷伦视频免费观看国产| 欧美精品久久久久久久免费| 日韩高清专区| 欧美在线一区二区三区四区| 欧美性受xxx| 免费国产黄色网址| 久久这里有精品| 欧美成人免费va影院高清| 精品国产免费av| 在线视频一二三区| 春日野结衣av| 人人澡人人澡人人看欧美| 欧美亚洲色图视频| 国产在线一区二区三区欧美| 日本在线观看a| 日韩av免费在线| 青青视频免费在线| 国产一区免费| 777精品视频| 国产成人免费91av在线| 国产精品乱码一区二区三区| 久久99视频精品| 色女人综合av| 免费av在线一区二区| www.欧美日本| 精品国产网站地址| 欧美激情日韩图片| 日本一本中文字幕| 亚洲最大的av网站| 亚洲xxxx视频| 日本黄网免费一区二区精品| 黄瓜视频免费观看在线观看www| 日日碰狠狠丁香久燥| 青青在线免费观看视频| 成人综合视频在线| 国产成人久久久| 午夜啪啪福利视频| 亚洲在线免费看| 日本毛片在线免费观看| 国内精品视频在线| 成人av一级片| 精品国模在线视频| 中文精品一区二区三区| 欧美一级电影久久| 粉嫩av免费一区二区三区| 国产在线欧美日韩| 97精品一区二区三区| 国产精品爽黄69天堂a| 亚洲精品一区二区三区av| 男女午夜激情视频| 久久影视中文粉嫩av| 国产精品久久97| 日本www高清视频| 成人精品久久av网站| 久久久黄色av| 午夜精品一区二区在线观看的| 亚洲影院污污.| 日韩精品欧美在线| 91久久在线视频| 国产精品传媒毛片三区| 日韩欧美亚洲v片| 91久久国产自产拍夜夜嗨| 91精品国产自产在线| 国产精品久久成人免费观看| 日本免费在线精品| 91黄在线观看| 日韩一区二区福利| 中文字幕中文字幕在线中一区高清| 一区二区三区观看| 国内自拍中文字幕| 久久精品中文字幕一区二区三区| 日韩中文字幕在线精品| 亚洲国产婷婷香蕉久久久久久99| 午夜精品久久久久久久男人的天堂 | 久久电影一区二区| 亚洲综合av影视| 国产奶头好大揉着好爽视频| 久久综合伊人77777| 精品嫩模一区二区三区| 国产精品一区视频| 欧美不卡视频一区发布| 国模视频一区二区| 国产精品久久久久免费| 精品欧美一区免费观看α√| www.国产一区| 欧美亚洲国产精品| 久久天堂av综合合色| 国内视频一区二区| 两个人的视频www国产精品| 国产一区国产精品| 欧美另类在线播放| 国产美女91呻吟求| 亚洲一区美女| 久久久亚洲网站| 日韩欧美亚洲天堂| 久久精品美女视频网站| 欧美黄色直播| 91成人综合网| 动漫一区二区在线| 久久免费视频3| 日韩三级在线播放| 国产精品视频99| 日韩中文字幕av在线| 久久免费少妇高潮久久精品99| 精品久久sese| 国产精品夜间视频香蕉| 亚洲91精品在线观看| 日日骚av一区| 国产青青在线视频| 国产成人精品网站| 亚洲人成人77777线观看| 91国在线高清视频| 久久久久久高潮国产精品视| 成人一区二区在线| 动漫一区二区在线| 国产欧美日韩网站| 亚洲综合在线中文字幕| 久久99国产精品99久久| 国产在线精品成人一区二区三区| 久久久久免费视频| 精品一区在线播放| 婷婷久久青草热一区二区| 成人亚洲综合色就1024| 欧美一级片免费在线| 国产精品极品尤物在线观看| 99se婷婷在线视频观看| 欧美图片激情小说| 色琪琪综合男人的天堂aⅴ视频 | 91成人在线视频观看| 日韩国产欧美一区| 欧美日韩国产va另类| 国产成人一区二区三区别| 亚洲乱码日产精品bd在线观看| 精品无码一区二区三区爱欲| 久久久久国产精品免费| 国产福利一区视频| 国产色视频一区| 欧洲精品码一区二区三区免费看| 日韩中文字幕网站| 爱福利视频一区二区| 欧美日韩性生活片| 色综合电影网| 欧美日韩福利在线观看| 国产精品女主播视频| 国产成人精品999| 成人免费xxxxx在线观看| 蜜桃传媒视频麻豆第一区免费观看| 国产精品福利片| 久久免费视频这里只有精品| 国产免费黄色av| 免费观看美女裸体网站| 青青草视频在线免费播放| 亚洲高清乱码| 一区二区三区四区五区视频| 国产精品福利在线观看网址| 久久精品国产69国产精品亚洲 | 国产欧美日韩专区发布| 欧美最猛性xxxx| 色婷婷综合久久久久中文字幕| 久久久久一区二区三区| 99色精品视频| 国产欧美日韩免费看aⅴ视频| 亚洲 国产 日韩 综合一区| 中文字幕日本最新乱码视频| 久久综合色视频| 97欧美精品一区二区三区| 国产伦精品一区二区三区四区视频_ | 日韩在线观看成人| 久久全国免费视频| 97国产一区二区精品久久呦| 福利在线一区二区| 古典武侠综合av第一页| 日本最新高清不卡中文字幕| 国产精品视频一区二区三区四区五区| 欧美福利一区二区三区| 日本高清不卡一区二区三| 久久99久久99精品中文字幕 | 国产美女直播视频一区| 亚洲综合在线做性| 久久久久久久久久久久久久久久av| 激情一区二区三区| 欧美激情国产日韩| 极品尤物一区二区三区| 国产亚洲精品美女久久久m| 免费毛片一区二区三区久久久| 欧美精品在线观看| 精品久久久久久一区| 九九九久久久| 俺去亚洲欧洲欧美日韩| 日韩视频永久免费观看| 国产精品美女主播| 免费97视频在线精品国自产拍|