2017-10-04 110 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

我還發現nuget包Akka.Persistence.TestKit版本1.2.3.43-beta。測試版自三個月以來沒有改變,只支持akka 1.2.2。它仍在發展中還是已經死了。我找不到任何有關這方面的信息。

你如何測試你的持續演員?

感謝您的幫助!

RICHI

回答

1

Akka.Persistence.TestKit已更名爲Akka.Persistence.TCK並且它僅用於測試的自定義事件日誌和快照存儲實現用於與Akka.Persistence協議的兼容性。它沒有帶來任何測試用戶角色的工具。

除了在內存中執行它們的實現之外,沒有內置方法可以與日記/快照存儲進行測試。據說,你可以像任何其他演員一樣使用日記/快照存儲。如果您查看持久性TCK規範(如JournalSpec)的實現,您可能會對該協議的工作原理有所瞭解。

例如,如果你想要射擊測試案例之前初始化你的一些事件日誌,你可以像下面:

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,對該字段的任何貢獻都是值得歡迎的。