我在ExUnit中编写了一些测试来说明不同的Supervisor策略是如何工作的。我曾计划通过故意导致生成的进程失败来测试结果,然后测试重新启动的进程的输出。
到目前为止,我没有成功创建传递测试,因为初始进程失败导致测试失败。我已经尝试在Supervisor / GenServer实现和测试实现中捕获错误(try / catch),但我无法捕获任何错误并避免测试失败。
谢谢!
答案 0 :(得分:1)
您需要小心您的链接。当您启动主管时,它会链接到当前进程,因此如果您使主管(或任何其他链接进程)崩溃,则会导致测试崩溃。
您可以通过设置Process.flag(:trap_exit, true)
来更改此行为现在链接不会触发崩溃,而是您可以在邮箱中找到格式为{:EXIT, pid, reason}
的邮件。
这是一种很好的测试方法,但对于生产或者通常你可能想要设置某种显示器。
答案 1 :(得分:1)
因为我故意导致进程失败并想在ExUnit测试中忽略此失败,所以我最终使用catch_exit / 1来防止测试进程失败。