2014-11-23 87 views

回答

1

也許,你會發現有用的另一種方法來單元測試gen_servers。 您可以直接測試gen_server回調,然後檢查其狀態轉換,而不是運行gen_server進程並測試其行爲。

例如:這種方法的here

-module(foo_server). 

%% Some code skipped 

handle_call({do_stuf, Arg}, _From, State) -> 
    NewState = modify_state(
    {reply, {stuf_done, Arg}, NewState}. 

%% Some code skipped 

-ifdef(TEST) 

do_stuf_test_() -> 
    {setup, 
     fun() -> 
      {ok, InitState} = foo_server:init(SomeInitParams), 
      InitState 
     end, 
     fun(State) -> 
      ok = foo_server:terminate(shutdown, State) 
     end, 
     fun(State) -> 
      Result = foo_server:handle_call({do_stuf, hello}, undefined, State), 
      [ 
       ?_assertMatch({reply, {stuf_done, hello}, _}, Result) 
      ] 
     end 
    } 
}. 

-endif. 

見討論,如果你處理複雜真的狀態和狀態轉換,也許你會發現proper很有幫助。