2015-08-12 1 views
1

меня ParentActor и ChildActor следующим образом:Как проверить, что сообщение Akka актер был направлен в это ребенок

class ParentActor extends UntypedActor { 
    final ActorSystem system = ActorSystem.create("MySystem"); 

    final ActorRef child = system.actorOf(Props.create(ChildActor.class), "child") 

    @Override 
    void onReceive(Object message) throws Exception { 
     if (message instanceof String) { 
      getContext().watch(child) 
      child.tell(message, getSelf()) 
     } else { 
      unhandled(message) 
     } 
    } 
} 

class ChildActor extends UntypedActor { 
    @Override 
    void onReceive(Object message) throws Exception { 
     if (message instanceof String) { 
      context().parent().tell("Hello from child actor!", self()); 
     } 
    } 
}  

Я хочу проверить связь между родителем и ребенком (если я отправить Струнный сообщение для ParentActor гарантировать, что ребенок получил его) с помощью TestKit и в java. ты можешь помочь мне с этим?

+0

Ваш «ребенок» на самом деле не является дочерним актером, для этого вам нужно использовать 'getContext(). ActorOf(). –

ответ

0

Измените родителя - введите Child actor Props через конструктор. И измените свой Child - введите родительскую ссылку через конструктор. В тесте при создании Parent введите еще один ChildProps, который принимает тестовый актер в качестве параметра. Изменение:

context().parent().tell("Hello from child actor!", self()); 

в

parentField.tell("Hello from child actor!", self()); 

Затем в тесте использует AKKA тест актер вместо Parent и передать его ребенку. И вы можете проверить ответ с помощью метода expectMsgEquals.

+0

хорошо, но можете ли вы привести пример тестового кода? –

+0

Я никогда не пробовал akka с java, только с scala, вот почему я только что описал решение. – ka4eli

Смежные вопросы