ivaneeo's blog

          自由的力量,自由的生活。

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

          Erlang被稱作是“工業級的語言”,在測試領域,理應是有相當成熟度的。而,Joe老先生本人,也是崇尚“拿測試結果說話”的人(在《Programming Erlang》書中,上來就搞測試,然后再開講的例子比比皆是)。就連 Erlang/OTP 本身的代碼質量也是有嚴密的測試作為保障的。所以,如果在Erlang領域,你見到遠比其他語言為多的測試相關工具、框架、包,絲毫也不應該感到驚奇。下面,我們就來看看“Erlang的測試兵器譜”中,都有什么好家伙。

          首先是大名鼎鼎的 Test_Server ,需要說明的是 Erlang/OTP 自身代碼的幾千個 Test Case 就是構建在它的基礎之上。Test_Server 的功能可謂面面俱到,讓人眼花繚亂,從簡單的測試任務,到對多環境下的測試,乃至對嵌入式系統進行測試,沒有它不在行的。但也正因為此,使用稍嫌復雜,比如必須從 Erlang/OTP 的源碼來構建和編譯 Test_Server ,又比如較為復雜的 case 定義。

          然后是 Yet Another 系列,隆重推出:yatsy——Yet Another Test Server (咦?最后一個 y 是哪里來的呢?), yatsy 和 test_server 的語法完全一致,功能大致相當,所不同的是: yatsy 是 host 在 google 上的 opensource 的項目,而 test_server 是 ericsson 的產品(雖說也給了 sourcecode 但不是 public repository ,這算哪門子區別?),另一個區別是 yatsy 和 yaws 有很好的結合(都是 Yet Another 一家的嘛),主要用來生成 report 。

          另外,還有 Erlang QuickCheck 是一個 commercial 的測試工具,咱們支持 opensource 這里就不表了。

          我個人最喜歡的小巧工具是 EUnit ,簡單,易用。對于“非火箭科技”的普通程序員來說,簡簡單單的就好。60秒入門如下:

          1. -module(fib).
          2. -export([fib/1]).
          3. %% 加了這句,會自動多出來一個 test() 方法,測試直接跑 fib:test() 就好了。
          4. -include_lib("eunit/include/eunit.hrl").
          5.  
          6. fib(0) -> 1;
          7. fib(1) -> 1;
          8. fib(N) when N > 1 -> fib(N-1) + fib(N-2).
          9.  
          10. %% xxx_test() 是測試 case ,test() 會調用每一個 case 就像 junit 一樣
          11. fib_test() -> fib(0) == 1.
          12.  
          13. %% xxxx_test_() case 生成器,每個 ?_assert(...) 都會生成一個 case 函數
          14. %% 一般用這個就可以了
          15. fib_test_() ->
          16.     [?_assert(fib(0) == 1),
          17.      ?_assert(fib(1) == 1),
          18.      ?_assert(fib(2) == 2),
          19.      ?_assert(fib(3) == 3),
          20.      ?_assert(fib(4) == 5),
          21.      ?_assert(fib(5) == 8),
          22.      ?_assertException(errorfunction_clausefib(-1)),
          23.      ?_assert(fib(31) == 2178309)
          24.     ].
          25.  
          26. setup() ->
          27.     io:format("Setup called"[]).
          28.  
          29. %% 如果需要 setup 就這么干
          30. do_test_() ->
          31.    {setupfun setup/0[?_assert(1=:=0)]}.

          就這么多了,簡潔明快吧。

          上面是功能測試或者說單元測試,那么,在性能測試上,我們有鼎鼎大名和鼎鼎大名的 Tsung (嗯,誰知道這個詞的正確發音是怎樣的?)。這個東西,留待日后俺學習到了再和大家分享。 :D

          posted on 2009-10-27 15:48 ivaneeo 閱讀(307) 評論(0)  編輯  收藏 所屬分類: erlang-分布式語言
          主站蜘蛛池模板: 长顺县| 内乡县| 阿拉善盟| 兴隆县| 大城县| 昌图县| 囊谦县| 桦南县| 元谋县| 巨鹿县| 永兴县| 巫山县| 松潘县| 上林县| 高碑店市| 塔河县| 耿马| 元朗区| 旺苍县| 宁陕县| 普宁市| 塔河县| 沙雅县| 遂溪县| 双峰县| 东辽县| 梓潼县| 苏州市| 东兰县| 政和县| 临夏市| 绥棱县| 巴南区| 宝坻区| 罗田县| 阜康市| 鲜城| 故城县| 琼中| 喀喇沁旗| 萝北县|