在《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实现这么一个功能来,这样就很方便了。