编写在监督过程死亡时不会失败的测试

时间:2014-07-22 17:51:28

标签: erlang otp elixir supervisor

我在ExUnit中编写了一些测试来说明不同的Supervisor策略是如何工作的。我曾计划通过故意导致生成的进程失败来测试结果,然后测试重新启动的进程的输出。

到目前为止,我没有成功创建传递测试,因为初始进程失败导致测试失败。我已经尝试在Supervisor / GenServer实现和测试实现中捕获错误(try / catch),但我无法捕获任何错误并避免测试失败。

  1. 有没有办法捕获这些错误,以免它们触发测试失败?
  2. 是否有更好/不同的方法来测试不同的主管策略?
  3. 谢谢!

2 个答案:

答案 0 :(得分:1)

您需要小心您的链接。当您启动主管时,它会链接到当前进程,因此如果您使主管(或任何其他链接进程)崩溃,则会导致测试崩溃。

您可以通过设置Process.flag(:trap_exit, true)来更改此行为现在链接不会触发崩溃,而是您可以在邮箱中找到格式为{:EXIT, pid, reason}的邮件。

这是一种很好的测试方法,但对于生产或者通常你可能想要设置某种显示器。

答案 1 :(得分:1)

因为我故意导致进程失败并想在ExUnit测试中忽略此失败,所以我最终使用catch_exit / 1来防止测试进程失败。