在调用回调函数后,是否可以检查gen_server的内部状态?我不想在这里更改我的服务器的API。
答案 0 :(得分:6)
你可以使用sys:get_state/1
,它可以很好地适用于所有gen。
答案 1 :(得分: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.