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