2012-04-26 2 views
0

내가 simple_one_for_one 관리자를 테스트하는 코드를 작성 시작할 수 있지만, 그것이 작동하지 수, 코드는 다음과 같습니다simple_one_for_one 아이가

-module(test_simple_one_for_one). 

-behaviour(supervisor). 

%% API 
-export([start_link/0, start_fun_test/0]). 

%% Supervisor callbacks 
-export([init/1]). 

-define(SERVER, ?MODULE). 

%%-------------------------------------------------------------------- 
start_link() -> 
    {ok, Pid} = supervisor:start_link({local, ?SERVER}, ?MODULE, []). 

start_fun_test() -> 
    supervisor:start_child(test_simple_one_for_one, []). 

init([]) -> 
    RestartStrategy = simple_one_for_one, 
    MaxRestarts = 1000, 
    MaxSecondsBetweenRestarts = 3600, 

    SupFlags = {RestartStrategy, MaxRestarts, MaxSecondsBetweenRestarts}, 

    Restart = permanent, 
    Shutdown = 2000, 
    Type = worker, 

    AChild = {fun_test_sup, {fun_test, run, []}, 
      Restart, Shutdown, Type, [fun_test]}, 
    io:format("start supervisor------ ~n"), 
    {ok, {SupFlags, [AChild]}}. 

내가

test_simple_one_for_one:start_link().

을 실행하면
test_simple_one_for_one:start_fun_test(). 

erl 쉘에서 오류가 발생합니다.

+0

코드가 잘 보이고 start_link와 start_fun_test가 호출 될 때 완벽하게 작동합니다. 이 오류는 start_link 전에 start_fun_test를 실행한다고 알립니다. – KrHubert

답변

1

테스트를 위해 작성한 코드가 모두있는 경우 감독자 하위를 등록 할 때 자녀를 시작할 때 호출되는 함수를 나타내는 suplely {M, F, A} 튜플을주의하십시오.

재미있는 점은 fun_test : run/1 기능을 찾을 수 없다고 생각합니다.