单向消息
记住,我们没有涉及调用函数并等待响应(TODO), 所以我们的例子都是用 tell 发送消息,这个故意的。 采用发射后不管(fire and forget)方式,我们不知道何时消息抵达 actor, 或者是不是到了,那我们如何测试?我们需要做的是发送个消息给 actor, 发送后检查 actor 是不是做了应该做的。 回应消息的 actor 应该处理消息,采取特定动作,像发送消息给另一个 actor, 或者存储内部状态,或者与另一个对象交互,或与 I/O 以某种方式交互, 如果 actor 的行为从外部完全无法可见,我们只能看其是否正确处理了消息来判断, 也可以通过TestActorRef查看 actor 的状态来判断。 有三种可以用来查看的变化形式:
- SilentActor - actor 的行为不能从外部直接观察到,它(TODO:who)可能是中间 actor 用来创建内部状态的步骤。 我们要测试那个 actor 至少正确处理的消息,没有抛出异常,还需要确定 actor 已经完成,以及内部状态改变。
- SendingActor - 当处理完接收到的消息时,actor 发送消息给另一个 actor (或多个 actor)。 我们把 actor 当作黑盒,检查为了回复接收到的消息而发出的消息。
- SideEffectingActor - actor 接受消息,与一个普通的对象以某种方式交互。 发送消息给 actor 后,我们可以判断对象是不是被影响了。
我们会针对上边的每种 actor 写测试,来说明在测试中验证结果的方法。