Можно ли проверить внутреннее состояние gen_server после вызова функции обратного вызова? Я бы предпочел не менять здесь API своего сервера.
Как проверить внутреннее состояние gen_server с помощью eunit
Ответы (2)
Вы можете использовать sys:get_state/1
, который хорошо работает со всеми поколениями.
person
mpm
schedule
23.11.2014
Возможно, вам пригодился бы другой подход к модульному тестированию 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.
См. обсуждение этого подхода здесь. сложные состояния и переходы между состояниями, возможно, вы окажетесь правильным полезным.
person
Viacheslav Kovalev
schedule
24.11.2014