class MyActor extends AbstractActor {
private int state = 0;
@Override
public Receive createReceive() {
return receiveBuilder()
.match(Increment.class, this::incrementState)
.build();
}
private void incrementState(Increment message) {
state += message.getValue();
}
}
@Test
public void testMyActor() {
TestActorRef<MyActor> actorRef = TestActorRef.create(system, Props.create(MyActor.class));
actorRef.tell(new Increment(5), ActorRef.noSender());
MyActor actor = actorRef.underlyingActor();
assertEquals(5, actor.getState());
}
class MyActor extends AbstractActor {
private ActorRef otherActor;
@Override
public Receive createReceive() {
return receiveBuilder()
.match(Init.class, this::init)
.match(SendMessage.class, this::sendMessage)
.build();
}
private void init(Init message) {
this.otherActor = message.getOtherActor();
}
private void sendMessage(SendMessage message) {
otherActor.tell(message, getSelf());
}
}
@Test
public void testMessagePassing() {
TestProbe probe = TestProbe.create(system);
TestActorRef<MyActor> actorRef = TestActorRef.create(system, Props.create(MyActor.class));
actorRef.tell(new Init(probe.ref()), ActorRef.noSender());
actorRef.tell(new SendMessage("Hello"), ActorRef.noSender());
probe.expectMsgClass(SendMessage.class);
}
class SupervisorActor extends AbstractActor {
private ActorRef worker1;
private ActorRef worker2;
@Override
public Receive createReceive() {
return receiveBuilder()
.match(Start.class, this::start)
.build();
}
private void start(Start message) {
worker1.tell(new DoWork(), getSelf());
worker2.tell(new DoWork(), getSelf());
}
}
@Test
public void testInteraction() {
TestActorRef<SupervisorActor> supervisorRef = TestActorRef.create(system, Props.create(SupervisorActor.class));
TestActorRef<WorkerActor> worker1Ref = TestActorRef.create(system, Props.create(WorkerActor.class));
TestActorRef<WorkerActor> worker2Ref = TestActorRef.create(system, Props.create(WorkerActor.class));
supervisorRef.underlyingActor().setWorkerActors(worker1Ref, worker2Ref);
supervisorRef.tell(new Start(), ActorRef.noSender());
expectMsgClass(DoWork.class);
expectMsgClass(DoWork.class);
}