2
在調用回調函數之後可以檢查gen_server的內部狀態嗎?我寧願不要在這裏更改我的服務器的API。如何使用eunit測試gen_server內部狀態
在調用回調函數之後可以檢查gen_server的內部狀態嗎?我寧願不要在這裏更改我的服務器的API。如何使用eunit測試gen_server內部狀態
你可以使用sys:get_state/1
,它可以很好地適用於所有gen。
也許,你會發現有用的另一種方法來單元測試gen_servers。 您可以直接測試gen_server回調,然後檢查其狀態轉換,而不是運行gen_server進程並測試其行爲。
例如:這種方法的here 也
-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.
見討論,如果你處理複雜真的狀態和狀態轉換,也許你會發現proper很有幫助。