2017-10-04 2 views
0

私は[Akka.Net 1.3.1]をReceiveActorsとReceivePersistentActorsの組み合わせで使用しています。これで私のアクターシステムのテストを書きたいと思います。akka.net永続アクタをテストするには

MyPersistentActorはReceivePersistentActorから継承し、MyActorはReceiveActorから継承します。

バージョン1.3.1を使用してAkka.TestKitもインストールしました。

しかし、ReceiveActorsだけがAkka.TestKitによってテストできるようです。 IActorRef myActorRef = this.Sys.ActorOf<MyActor>(); // is fine IActorRef myPersistentActorRef = this.Sys.ActorOf<MyPersistentActor>(); // is a problem

また、ナゲットパッケージAkka.Persistence.TestKitバージョン1.2.3.43-betaも見つかりました。ベータ版は3ヶ月以来変更されておらず、akka 1.2.2のみをサポートしています。それはまだ開発中か死んでいるか?私はそれに関する情報を見つけることができません。

どのように永続アクタをテストしますか?

ありがとうございました!

Richi

答えて

1

Akka.Persistence.TestKitはAkka.Persistence.TCKに改名されましたし、それが唯一Akka.Persistenceプロトコルとの互換性のためにカスタムイベントジャーナルとスナップショットストアの実装をテストするために使用されています。ユーザーのアクターをテストするためのユーティリティーはありません。

テスト目的でジャーナル/スナップショットストアと連携して、インメモリでの実装を実装することの他に、組み込みの方法はありません。それが言われると、他の俳優とまったく同じようにジャーナル/スナップショットストアで実際に作業することができます。 JournalSpecのような永続TCK仕様の実装を調べると、そのプロトコルの仕組みについてのいくつかの洞察が得られるかもしれません。あなたは、テストケースを発射する前に、いくつかのイベントであなたのジャーナルを初期化したい場合、あなたは次のようにそれを行うことができる。例えば

、:

void InitWithEvents(string persistenceId, params object[] events) 
{ 
    var probe = CreateTestProbe(); 
    var writerGuid = Guid.NewGuid().ToString(); 
    var writes = new AtomicWrite[events.Length]; 
    for (int i = 0; i < events.Length; i++) 
    { 
     var e = events[i]; 
     writes[i] = new AtomicWrite(new Persistent(e, i+1, persistenceId, "", false, ActorRefs.NoSender, writerGuid)); 
    } 
    var journal = Persistence.Instance.Apply(Sys).JournalFor(null); 
    journal.Tell(new WriteMessages(writes, probe.Ref, 1)); 

    probe.ExpectMsg<WriteMessagesSuccessful>(); 
    for (int i = 0; i < events.Length; i++) 
     probe.ExpectMsg<WriteMessageSuccess>(); 
} 

PS:持続性で欠けている部分が明確にありTestKit APIは、そのフィールドへの寄稿は歓迎する以上のものです。

関連する問題