2016-12-07 15 views
0

私は複数の子を持つ親アクターを持っており、それらのいくつかが同じメッセージを受信して​​いるかどうかチェックしたいと思います。 私が理解できるように、TestKitにはTestActorが1つしかないので、これを実現する方法はありませんか?2つの異なるテストアクターを作成する方法

ここでは例を示します。 親アクターには、構成メッセージによって設定されたChild1、Child2、Child3のアクターがあります。 親がMsg1メッセージを受け取ったときにChild1とChild2に送信しますが、Child3には送信しないことを確認する必要があります。

唯一の方法は、子アクターをTestActorで置き換え、ExpectMsgを2回呼び出すことです。親は子どもにメッセージを送ってくれると教えてくれるが、それが正しいものに送られたかどうかを確認する方法は?要するに

答えて

0

:より詳細なTestProbeクラス、たとえばhere

を参照してください。 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でも利用可能です

関連する問題