2017-10-04 106 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,对该字段的任何贡献都是值得欢迎的。