2017-10-04 6 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는 해당 분야에 대한 모든 기여를 환영합니다.