我有多个孩子的父母演员,我想检查他们中的一些人是否收到相同的消息。 据我所知,TestKit只有一个TestActor,所以没有办法实现这个目标吗?
这是一个例子: 父actor具有Child1,Child2和Child3 actor,由配置消息设置。 我需要检查当Parent收到Msg1消息时,它会将它发送到Child1和Child2,但不会发送到Child3。
唯一的方法是使用TestActor替换子actor,然后两次调用ExpectMsg。它会告诉我们Parent向其子节点发送消息,但是如何确保将消息发送给正确的节点?
答案 0 :(得分:0)
更详细: TestKit有一个名为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