应该如何测试这种erlang gen_server?

时间:2012-10-01 14:13:02

标签: erlang

我有一个gen_server导出这样的函数:

my_function(Param) ->
    gen_server:cast(?SERVER, {forward, Param}).

并且像这样有一个handle_cast:

handle_cast({forward, Param}, #state{peer=Socket} = State) ->
    gen_tcp:send(Socket, Param),
    {noreply, State}.

在大多数情况下,使用gen_tcp连接的对等体将回复不同消息中的一个,并且我在handle_info中处理回复

handle_info({tcp, Socket, Data}) ->
    io:format("Received : ~p~n", [Data]),
    {noreply, State}.

有没有推荐的方法在erlang中测试这种场景?

1 个答案:

答案 0 :(得分:0)

您可以使用设置/拆卸功能来执行类似的操作:

my_test_() -> {
    setup,
    fun() -> my_server:start_link() end,
    fun(_) -> my_server:stop() end,
    fun() ->
        %% here you do all the message sending and such
    end
}.

你还需要导出一个stop / 0函数,它将负责调用/强制转换gen_server以便停止它。

您可以在灯具here

上找到更多信息

HTH, 阿林