调用回调函数后是否可以检查 gen_server 的内部状态?我宁愿不在这里更改我的服务器的 API。
问问题
523 次
2 回答
6
你可以使用sys:get_state/1
which 与所有 gen 都很好。
于 2014-11-23T22:24:15.920 回答
1
也许,您会发现另一种有用的单元测试 gen_servers 方法。您可以直接测试 gen_server 回调,然后检查其状态转换,而不是运行 gen_server 进程并测试其行为。
例如:
-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.
于 2014-11-24T06:19:24.207 回答