如何创建两个不同的测试角色
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
我有 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