在调用回调函数之后可以检查gen_server的内部状态吗?我宁愿不要在这里更改我的服务器的API。如何使用eunit测试gen_server内部状态
2
A
回答
6
你可以使用sys:get_state/1
,它可以很好地适用于所有gen。
1
也许,你会发现有用的另一种方法来单元测试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很有帮助。
相关问题
- 1. eunit测试超时
- 2. 当这些状态是内部属性时,如何使用单元测试创建测试状态?
- 3. 如何测试内部状态的oracle包?
- 4. 如何测试VisualStateManager状态?
- 5. 从gen_server转换返回状态
- 6. 处理gen_server状态的清理
- 7. eunit测试发送的消息
- 8. jQuery - 使用动画测试slideToggle状态?
- 9. 获取gen_server/gen_fsm状态以进行调试
- 10. 如何用phpunit测试内部数组
- 11. 如何单元测试会话状态
- 12. 如何测试Qt SCXML状态机
- 13. 如何测试更新状态
- 14. DB2如何测试游标的状态
- 15. 使用Moq进行有状态和无状态测试
- 16. Beta测试,外部测试状态为不活动
- 17. 读取很多时间配置文件或使用gen_server状态?
- 18. 如何使用钢筋来创建erun模块并进行eunit测试?
- 19. 如何不符合链接Rebar3 eunit测试的priv目录?
- 20. 如何使用Ring测试会话状态?
- 21. 自动验收测试如何使用设置初始状态?
- 22. 如何使用c#Fitnesse + Slim维护Fitnesse测试中的状态
- 23. 如何设置测试状态中测试单元成功
- 24. 如何在Rails的功能测试中测试cookies状态?
- 25. ReactJS:我如何使用内部组件设置状态?
- 26. 网站测试状态
- 27. 测试有状态类
- 28. 使用XPath XSLT内部测试条
- 29. specs2 - 如何在测试本身内部和内部使用相同的变量?
- 30. 如何测试内部方法