在《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实现这么一个功能来,这样就很方便了。
浙公网安备 33010602011771号