如何考验一个演员?

How to test an actor?

如何测试演员?由于调用不是同步的,一条消息可以导致多条消息发送,有什么测试方法吗?

例如我如何测试我的演员发送了 3 条消息以响应另一条消息?

一般来说,您无法测试参与者做了什么,除非它与您在构造或输入消息中提供的特征或接口交互。所以如果你有像下面这样的演员。

actor MyActor
  be do_stuff(receiver: MyReceiver)

您使用一种模式,在该模式中,您结合了计时器、超时和包装器 actor,后者提供 MyReceiver 来测试 actor 是否确实发送了预期的消息或消息序列。

Pony 已经包含了 ponytest 包,对此类测试提供了一些支持。您可以在 GitHub 查看 PonyTest actor。基本上,您必须指定超时并确保您的其中一个参与者在测试助手中调用 complete 才能成功。请注意,API 自上一个稳定版本以来已更改。