我正在尝试测试一个包含主管和两个(不同)工作人员的应用程序.我正在使用eunit,所以在我的设置和清理中,我有:
setup() ->
{ok, Pid} = foo_sup:start_link(),
Pid.
cleanup(Pid) ->
exit(Pid, kill).
Run Code Online (Sandbox Code Playgroud)
foo_sup:start_link/0
定义为:
start_link() ->
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
Run Code Online (Sandbox Code Playgroud)
但是,当我的测试运行时,我得到了{badmatch,{error,{already_started,<0.188.0>}}}
,这意味着我的主管仍在运行.
我如何能:
发送shutdown
信号使主管杀死其子女并退出:
exit(Pid, shutdown).
Run Code Online (Sandbox Code Playgroud)
您可能必须首先取消测试过程与测试的关联.
监视进程,等待它退出:
Ref = monitor(process, Pid),
receive
{'DOWN', Ref, process, Pid, _Reason} ->
ok
after 1000 ->
error(exit_timeout)
end.
Run Code Online (Sandbox Code Playgroud)