我的蓝海

忙忙碌碌又一天

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

在《Erlang编程指南》中第19章专门讲解Eunit测试驱动开发,测试了其中的一个例子,贴出来备忘

待测试的文件serial.erl						
-module(serial).
-export([treeToList/1,listToTree/1,tree0/0,tree1/0]).

treeToList({leaf,N})->
    [2,N];
treeToList({node,T1,T2}) ->
    TTL1 = treeToList(T1),
    [Size1|_] = TTL1,
    TTL2 = treeToList(T2),
    [Size2|_] = TTL2,
    [Size1+Size2+1|TTL1++TTL2].

listToTree([2,N]) ->
    {leaf,N};
listToTree([_|Code]) ->
    case Code of
	[M|_]->
	    {Code1,Code2} = lists:split(M,Code),
	    {node,
	     listToTree(Code1),
	     listToTree(Code2)
	    }
    end.

tree0() ->
    {leaf,ant}.
tree1() ->
    {node,
     {node,
      {leaf,cat},
      {node,
       {leaf,dog},
       {leaf,emu}
      }
     },
     {leaf,fish}
    }.

下面是测试的文件 serial_tests.erl

-module(serial_tests).
-include_lib("eunit/include/eunit.hrl").
-import(serial,
	[treeToList/1,listToTree/1,tree0/0,tree1/0]).

leaf_test()->
    ?assertEqual(tree0(), listToTree(treeToList(tree0()))).

mod_test() ->
    ?assertEqual(tree1(), listToTree(treeToList(tree1()))).
在erlang的shell中,执行serial_tests:test().来启动测试。
serial_tests.erl 添加-include_lib("eunit/include/eunit.hrl"). ,所以自动添加test()方法,并且在test()
方法中,自动调用以“_test”后缀的方法
本方法将测试函数放到一个独立的带_tests的文件中。
可以考虑通过工具自动生成测试文件(带“_tests”的文件)的基础架构,下一步想办法使用erlang实现这么一个功能来,这样就很方便了。
 
posted on 2011-05-08 02:02  我的蓝海  阅读(859)  评论(0编辑  收藏  举报