2014-01-15 33 views
5

我試圖測試一個包含主管和兩個(不同)工作人員的應用程序。我使用eunit,所以在我的設置和清理,我有:停止Erlang主管?

setup() -> 
    {ok, Pid} = foo_sup:start_link(), 
    Pid. 

cleanup(Pid) -> 
    exit(Pid, kill). 

foo_sup:start_link/0被定義爲:

start_link() -> 
    supervisor:start_link({local, ?MODULE}, ?MODULE, []). 

然而,當我的測試運行,我得到{badmatch,{error,{already_started,<0.188.0>}}},這意味着我的主管仍在運行。

如何:

  1. 信號監事停止本身及其所有的孩子?
  2. 等待完成?

回答

7
  1. 發送shutdown信號,使監殺死其子和退出:

    exit(Pid, shutdown). 
    

    您可能需要先取消從測試的過程。

  2. 監控過程中,要等待它退出:

    Ref = monitor(process, Pid), 
    receive 
        {'DOWN', Ref, process, Pid, _Reason} -> 
         ok 
    after 1000 -> 
         error(exit_timeout) 
    end. 
    
+1

而是「關閉」的,用「正常」,所以它不打倒測試過程也是如此。 – hammett