如何创建两个不同的测试角色

How to create two different test actors

我有 parent 个演员和多个 children,我想检查他们中的一些人是否收到相同的消息。 据我了解,TestKit只有一个TestActor,所以没有办法实现吗?

这是一个例子: Parent actor 有Child1、Child2 和Child3 actors,由配置消息设置。 我需要检查当 Parent 收到 Msg1 消息时,它会将其发送给 Child1 和 Child2,但不会发送给 Child3。

唯一的方法是用 TestActor 替换 child actor,然后调用 ExpectMsg 两次。它会告诉我们 Parent 向它的 children 发送了消息,但是如何确定它发送给了正确的人?

简而言之:见TestProbe class, example here

更详细: TestKit 有一个特殊的 class 叫做 TestProbe。 TestProbe 具有 TestActor 的所有功能,然后是一些。作为额外的好处,您可以 运行 多个并行探测。

[Test]
public void FriendsPresenceActor_should_alert_other_users_when_friend_comes_online()
{
    var presence = ActorOfAsTestActorRef<FriendsPresenceActor>("presence");

    // create probes in place of users
    var user1 = CreateTestProbe("user1");
    var user2 = CreateTestProbe("user2");
    var user3 = CreateTestProbe("user3");

    // make those probes send a message I want
    user1.Send(presence, new RegisterUser(user1));
    user2.Send(presence, new RegisterUser(user2));
    user3.Send(presence, new RegisterUser(user3));

    // pre-check we have the right number of subscribers
    Assert.AreEqual(3, presence.UnderlyingActor.Subscribers.Count);

    // trigger by having a probe send msg that I want
    user1.Send(presence, new UserOnline(user1));

    // other user probes should have been informed of new friend presence
    user1.ExpectNoMsg();
    user2.ExpectMsgFrom<UserOnline>(presence, online => online.User.Equals(user1));
    user3.ExpectMsgFrom<UserOnline>(presence, online => online.User.Equals(user1));
}

P.S。请注意 AutoPilot,它也适用于 Akka.Net