新人,刚开始学习 erlang ,使用 rebar 生成了一个标准的 otp 应用程序,往 Supervisor 加了一个 gen_server ,却通不过默认单元测试了。提示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | gamexg@vps1:~/erl/cw$ rebar compile eunit ==> cw (compile) Compiled src/cw_dnode.erl Compiled src/cw_sup.erl Compiled src/cw_app.erl ==> cw (eunit) =INFO REPORT==== 18-Apr-2011::14:53:47 === application: cw exited: {{start_spec,{invalid_modules,cw_dnode}}, {cw_app,start,[normal,[]]}} type: temporary cw_app: simple_test (module 'cw_app')...*failed* ::error:{badmatch,{error,{{start_spec,{invalid_modules,cw_dnode}}, {cw_app,start,[normal,[]]}}}} in function cw_app:simple_test/0 ======================================================= Failed: 1. Skipped: 0. Passed: 0. Cover analysis: /home/gamexg/erl/cw/.eunit/index.html ERROR: One or more eunit tests failed. |
最后发现原因是回调模块应该是列表,我却直接把模块名填上了….
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | -module(cw_sup). -behaviour(supervisor). %% API -export([start_link/0]). %% Supervisor callbacks -export([init/1]). %% Helper macro for declaring children of supervisor -define(CHILD(I, Type), {I, {I, start_link, []}, permanent, 5000, Type, [I]}). %% =================================================================== %% API functions %% =================================================================== start_link() -> supervisor:start_link({local, ?MODULE}, ?MODULE, []). %% =================================================================== %% Supervisor callbacks %% =================================================================== init([]) -> {ok, { {one_for_one, 5, 100}, [ {dnode, {cw_dnode,start_link,[]}, permanent, 10000, worker, cw_dnode % 这里错了,应该是 [cw_dnode] ,是列表。 } ] } }. |