国产精品一区二区精品_久久小视频_天堂va在线观看_99久久夜色精品国产亚洲96_日本手机在线视频_av成人免费

當前位置:首頁 > 網站舊欄目 > 學習園地 > 設計軟件教程 > 使用EUnit進行單元測試

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

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

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

1,首次從http://support.process-one.net/doc/display/CONTRIBS/EUnit 獲取對應的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"結尾的函數作為測試函數;為你的module添加并導出了test/0函數;為你提供了豐富的test macro。(自動導出test函數,是通過compile指示符的parse_transform選項進行處理)

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

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


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

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


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

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


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


怎么樣,很簡單了吧,好的,比如我有一系列的內容要測試,我就可以簡單的寫成這樣:
Erlang代碼 復制代碼
  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)不會測試通過),
某個表達式是否匹配,是否產生指定的異常等。
好了,暫時就這些基本的東西,更多的內容查看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()的函數,作為一個test 單元
形如_test_()的函數作為test generator,其用來產生test單元,其結尾表達式可以為:
單個形如?_xxx的測試,表示一個test單元
也可以為一個List(可以為Deep List),List進行flatten后,長度表示test單元數目如下面代碼表示五個測試單元:

Erlang代碼 復制代碼
  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.     ].  

安徽新華電腦學校專業職業規劃師為你提供更多幫助【在線咨詢
国产精品一区二区精品_久久小视频_天堂va在线观看_99久久夜色精品国产亚洲96_日本手机在线视频_av成人免费
<button id="0mgmq"><pre id="0mgmq"></pre></button>
  • <tr id="0mgmq"></tr>
  • <abbr id="0mgmq"><source id="0mgmq"></source></abbr> <button id="0mgmq"></button>
  • 国新精品乱码一区二区三区18| 国产精品99久久久久久久| 久久久婷婷一区二区三区不卡| 亚洲精选在线| 欧美在线播放| 麻豆av一区二区三区久久| 99热这里只有精品8| 欧美成人免费在线| 视频一区二区三区在线观看| 懂色中文一区二区三区在线视频| 国产精品乱子乱xxxx| 午夜欧美精品久久久久久久| 日韩视频在线观看国产| 国产高清在线精品一区二区三区| 欧美一区=区| 在线亚洲激情| 亚洲伦伦在线| 亚洲欧洲一区二区在线观看| 国产精品国产一区二区| 中国成人亚色综合网站| 日本一区免费在线观看| 欧美人与性禽动交精品| 欧美成人一区二区在线| 久久精品中文字幕一区二区三区| 精品国产乱码一区二区三区四区| 99re国产在线播放| av激情久久| 国产无套精品一区二区| 国产一区二区不卡视频在线观看| 国产精品免费一区二区三区在线观看 | 香蕉成人久久| 欧美亚洲在线| av一区二区三区四区电影| yy111111少妇影院日韩夜片| 国产高清在线一区| 蜜桃视频日韩| 亚洲国产一区在线| 欧美少妇一区| 一本不卡影院| 97自拍视频| 欧美不卡在线一区二区三区| 日韩精品欧美一区二区三区| 艳色歌舞团一区二区三区| 欧美一区二区在线| 99re国产精品| 久久综合影音| 日本一区二区三区www| 女同性一区二区三区人了人一| 国产精品激情| 亚洲一区二区三区精品动漫| 成人三级在线| 亚洲最大色综合成人av| 亚洲另类黄色| 久久国产精品 国产精品| 一区在线电影| 国产亚洲综合精品| 精品国产免费人成电影在线观...| 区一区二区三区中文字幕| 欧美午夜精品| www久久99| 午夜精品视频| 1卡2卡3卡精品视频| 欧美一区二区高清在线观看| 亚洲一级网站| 国产一区二区自拍| 韩国亚洲精品| 精品毛片久久久久久| 欧美日韩一区二区视频在线观看| 麻豆成人av| 在线一区高清| 岛国一区二区三区高清视频| 亚洲资源在线网| 99久久99久久| 狠狠色狠狠色综合日日tαg| 国产精品大全| 亚洲欧洲另类| 三区精品视频| 2014亚洲精品| 黄色亚洲在线| 国产精品一区二区三区精品| 亚洲视屏一区| 日韩在线三区| 91超碰rencao97精品| 国产精品v亚洲精品v日韩精品| 国产视频精品网| 一区二区三区四区五区在线 | 久久综合福利| 中文亚洲字幕| 欧美一区二区在线| 久久精品ww人人做人人爽| 亚洲一区二区三区精品在线观看| 一区二区三区我不卡| 国产精华一区| 久久国产精品高清| 亚洲国产一区二区精品专区| 亚洲国产日韩美| 麻豆av一区| 国产精品国模大尺度私拍| 亚洲久久一区| 国内精品一区二区| 在线观看精品视频| 日本在线一区| 六月婷婷久久| 精品视频一区在线| www久久99| 91九色露脸| 久久黄色影院| 午夜在线观看免费一区| 亚洲区一区二| 伊人久久久大香线蕉综合直播| 神马影院一区二区| 欧美精品中文字幕一区二区| 成人自拍网站| 国产66精品久久久久999小说| 男女精品网站| 毛片一区二区| 久久久夜夜夜| 久久精品国语| 久久99伊人| 亚洲一区日韩在线| 免费视频一区| 99久久伊人精品影院| 97超碰人人看人人| 国产精品一级久久久| 国产高清自拍99| 国产伦精品一区二区三区视频黑人 | 欧美日本韩国国产| 欧美理论一区二区| 日韩三级电影| 欧美不卡一区| 99这里有精品| 久久美女性网| 狠狠色狠狠色综合人人| 久久亚洲综合网| 亚洲乱码一区二区三区| 欧美一区二区视频在线 | 欧美美乳视频网站在线观看| 日本午夜一区二区三区| 亚洲欧洲一区二区福利| 国内久久精品| 男人的天堂亚洲在线| 岛国一区二区三区高清视频| 国产一区二区在线网站| 亚洲国产一区二区在线| 国内激情久久| 久久国产精品一区二区三区四区 | 六月天综合网| 国产一级特黄a大片99| 神马欧美一区二区| 亚洲国产一区二区在线| 久久久水蜜桃av免费网站| 久久五月天婷婷| 国产一区清纯| www.成人av.com| 亚洲成人网上| 国产日韩一区二区三区在线| 国产精品视频入口| 欧美高清视频一区| 久久高清一区| 亚洲成人午夜在线| 国产精品久久亚洲7777| 久久久久久国产精品一区| 韩日午夜在线资源一区二区| 91视频网页| 一区二区三区久久网| 国产欧美日韩一区二区三区在线 | av日韩免费电影| 久久亚洲高清| 国产高清精品一区| 亚洲欧美一区二区原创| a91a精品视频在线观看| 欧美性xxxx69| 亚洲福利精品| 欧美激情1区| 黑人一区二区| 激情视频一区二区| 国产精品一区二区三区不卡| 欧美在线一二三区| 国产欧美韩日| 日韩一级欧洲| 色女人综合av| 久久综合一区| 欧美私人啪啪vps| 免费毛片一区二区三区久久久| 狠狠色丁香久久综合频道| 久久久综合亚洲91久久98| 国产偷久久久精品专区| 亚洲黄色一区二区三区| 久久久久久网| 亚洲激情网址| 牛牛国产精品| 欧洲亚洲一区| 147欧美人体大胆444| 亚洲国产精品第一区二区| 天堂av一区二区| 精品一区在线播放| 91精品国产91久久久久青草| 99久久精品免费看国产一区二区三区| 欧美精品午夜| 久久久久资源|