ɨһɨ
·ÖÏíÎÄÕµ½Î¢ÐÅ
ɨһɨ
¹Ø×¢¹Ù·½¹«ÖÚºÅ
ÖÁ¶¥Í·Ìõ
¡¡¡¡Erlang±»³Æ×÷ÊÇ¡°¹¤Òµ¼¶µÄÓïÑÔ¡±£¬ÔÚ²âÊÔÁìÓò£¬ÀíÓ¦ÊÇÓÐÏ൱³ÉÊì¶ÈµÄ¡£¶ø£¬JoeÀÏÏÈÉú±¾ÈË£¬Ò²ÊdzçÉС°ÄòâÊÔ½á¹û˵»°¡±µÄÈË£¨ÔÚ¡¶Programming Erlang¡·ÊéÖУ¬ÉÏÀ´¾Í¸ã²âÊÔ£¬È»ºóÔÙ¿ª½²µÄÀý×ӱȱȽÔÊÇ£©¡£¾ÍÁ¬ Erlang/OTP ±¾ÉíµÄ´úÂëÖÊÁ¿Ò²ÊÇÓÐÑÏÃܵIJâÊÔ×÷Ϊ±£Õϵġ£ËùÒÔ£¬Èç¹ûÔÚErlangÁìÓò£¬Äã¼ûµ½Ô¶±ÈÆäËûÓïÑÔΪ¶àµÄ²âÊÔÏà¹Ø¹¤¾ß¡¢¿ò¼Ü¡¢°ü£¬Ë¿ºÁÒ²²»Ó¦¸Ã¸Ðµ½¾ªÆæ¡£ÏÂÃ棬ÎÒÃǾÍÀ´¿´¿´¡°ErlangµÄ²âÊÔ±øÆ÷Æס±ÖУ¬¶¼ÓÐʲôºÃ¼Ò»ï¡£
¡¡¡¡Ê×ÏÈÊÇ´óÃû¶¦¶¦µÄ Test_Server£¬ÐèҪ˵Ã÷µÄÊÇ Erlang/OTP ×ÔÉí´úÂëµÄ¼¸Ç§¸ö Test Case ¾ÍÊǹ¹½¨ÔÚËüµÄ»ù´¡Ö®ÉÏ¡£Test_Server µÄ¹¦ÄÜ¿ÉνÃæÃæ¾ãµ½£¬ÈÃÈËÑÛ»¨çÔÂÒ£¬´Ó¼òµ¥µÄ²âÊÔÈÎÎñ£¬µ½¶Ô¶à»·¾³ÏµIJâÊÔ£¬ÄËÖÁ¶ÔǶÈëʽϵͳ½øÐвâÊÔ£¬Ã»ÓÐËü²»ÔÚÐеġ£µ«Ò²ÕýÒòΪ´Ë£¬Ê¹ÓÃÉÔÏÓ¸´ÔÓ£¬±ÈÈç±ØÐë´Ó 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ÃëÈëÃÅÈçÏ£º
¡¡¡¡-module(fib).
¡¡¡¡-export([fib/1]).
¡¡¡¡%% ¼ÓÁËÕâ¾ä£¬»á×Ô¶¯¶à³öÀ´Ò»¸ö test() ·½·¨£¬²âÊÔÖ±½ÓÅÜ fib:test() ¾ÍºÃÁË¡£
¡¡¡¡-include_lib("eunit/include/eunit.hrl").
¡¡¡¡fib(0)-> 1
¡¡¡¡fib(1)-> 1
¡¡¡¡fib(N) whenN>1-> fib(N-1)+ fib(N-2).
¡¡¡¡%% xxx_test() ÊDzâÊÔ case £¬test() »áµ÷ÓÃÿһ¸ö case ¾ÍÏñ junit Ò»Ñù
¡¡¡¡fib_test()-> fib(0)== 1.
¡¡¡¡%% xxxx_test_() case Éú³ÉÆ÷£¬Ã¿¸ö ?_assert(...) ¶¼»áÉú³ÉÒ»¸ö case º¯Êý
¡¡¡¡%% Ò»°ãÓÃÕâ¸ö¾Í¿ÉÒÔÁË
¡¡¡¡fib_test_()->
¡¡¡¡[?_assert(fib(0)== 1),
¡¡¡¡_assert(fib(1)== 1),
¡¡¡¡_assert(fib(2)== 2),
¡¡¡¡_assert(fib(3)== 3),
¡¡¡¡_assert(fib(4)== 5),
¡¡¡¡_assert(fib(5)== 8),
¡¡¡¡_assertException(error, function_clause, fib(-1)),
¡¡¡¡_assert(fib(31)== 2178309)
¡¡¡¡].
¡¡¡¡setup()->
¡¡¡¡io:format("Setup called", []).
¡¡¡¡%% Èç¹ûÐèÒª setup ¾ÍÕâô¸É
¡¡¡¡do_test_()->
¡¡¡¡{setup, fun setup/0, [?_assert(1=:=0)]}.
¡¡¡¡¾ÍÕâô¶àÁË£¬¼ò½àÃ÷¿ì°É¡£
¡¡¡¡ÉÏÃæÊǹ¦ÄܲâÊÔ»òÕß˵µ¥Ôª²âÊÔ£¬ÄÇô£¬ÔÚÐÔÄܲâÊÔÉÏ£¬ÎÒÃÇÓ榶¦´óÃûºÍ¶¦¶¦´óÃûµÄ Tsung£¨àÅ£¬ËÖªµÀÕâ¸ö´ÊµÄÕýÈ··¢ÒôÊÇÔõÑùµÄ£¿£©¡£Õâ¸ö¶«Î÷£¬Áô´ýÈÕºó°³Ñ§Ï°µ½ÁËÔٺʹó¼Ò·ÖÏí¡£