我有GenServer
,它基本上只处理cast
。
所以我没有跟踪服务器状态的任何功能(因为我不需要它)。
问题:虽然我在生产中不需要它,但我需要进行一些测试。
我可以定义handle_call
只是为了跟踪测试服中的服务器状态,但是,这感觉不对。
我想在运行之前在运行时添加这个handle_call
函数,所以我可以在某些强制转换序列的情况下跟踪服务器状态。
试图找到一些有用的数据谷歌搜索,但没有找到任何东西。
答案 0 :(得分:4)
由于GenServer是一个OTP特殊过程,您可以使用:sys
模块中的工具来检查它的状态和行为。其中一个函数是:sys.get_state/1
,它允许您访问进程的状态,而无需在服务器中定义任何特定的回调。
答案 1 :(得分:0)
您的意思是您不希望编译的模块包含要在生产中出现的给定handle_call
函数吗?例如,在eunit中,您可以使用ifdef(TEST).
/ endif.
包围您希望存在的功能以进行测试。如果您正在使用rebar3,并使用rebar3 eunit
运行eunit测试,则rebar3会自动为您定义TEST
,这样您就可以完成所有操作(以及包含eunit.hrl
)。否则,您可以在编译时手动定义它。