【问题标题】:Erlang init_per_group terminates gen_serverErlang init_per_group 终止 gen_server
【发布时间】:2016-08-09 04:40:23
【问题描述】:

普通测试init_per_group/2 在以gen_server:start_link 启动时终止gen_server。 但是用gen_server:start启动服务器是可以的。

gen_server 可以使用init_per_suite/1init_per_testcase/2 中的任何这些方法(startstart_link)启动。

为什么不能在init_per_group/2 中用gen_server:start_link 启动gen_server?

【问题讨论】:

  • gen_server:start_link 失败时的错误码是什么?
  • 没有错误。我的服务器陷阱退出标志。所以在init_per_group/2结束时我进入gen_server:terminate/2这个原因:{#Ref<0.0.1.845>,1475, [{server,<0.226.0>}, {watchdog,<0.225.0>}, {tc_logfile, ... [config data]我使用erlang 18.1和common test v1.12

标签: erlang erlang-otp gen-server common-test


【解决方案1】:

发生这种情况是因为init_per_group 像每个测试用例一样在单独的进程中运行,并且该进程以退出原因退出,该退出原因传达有关组初始化成功/失败的信息。来自test_server:run_test_case_eval

exit({Ref,Time,Value,Loc,Opts}).

由于gen_server 链接到运行init_per_group 的进程,并且由于退出原因不是normal 并且gen_server 没有捕获退出,所以gen_server 进程以相同的退出原因退出.

另一方面,init_per_testcase 和测试用例本身在同一个进程中运行,所以不会出现这个问题。

【讨论】:

  • 谢谢。现在我懂了。但是还有一些奇怪的地方:当 gen_server 执行陷阱退出时,它不会收到 {'EXIT', ...} 消息,并且无论如何都会终止。
猜你喜欢
  • 2011-08-09
  • 2014-11-09
  • 2011-10-08
  • 2014-05-12
  • 1970-01-01
  • 2012-09-05
  • 2016-07-26
  • 2012-11-16
  • 2019-01-29
相关资源
最近更新 更多