Je veux utiliser à partir de test d'acteur dans l'exemple de code create actor, mais en exécutant le test d'acteur throws ActorInitializationException. mon objectif est de voir le test buts par le test acteur et je suis en utilisant le test JUnit mais mon code de classe en moins:Test acteur dans akka par java et avoir ActorInitializationException
public class Worker extends AbstractActor {
private ActorSystem system = ActorSystem.create("worker");;
private Props props = Props.create(Worker.class , system.guardian().toString());
private ActorRef actor = system.actorOf(props);
@Override
public void preStart() {
System.out.println("worker actor started");
}
@Override
public void postStop() {
System.out.println("worker actor stopped");
}
@Override
public Receive createReceive() {
return receiveBuilder()
.matchAny(x -> getSender().tell(x, getSelf()))
.build();
}
@Test
public void testMain() throws Exception {
Future sFuture = ask(actor, "ping" , 1000);
System.out.println("First : " + sFuture);
}
}
and when running test method in up code this exception occur:
akka.actor.ActorInitializationException: You cannot create an instance of [akka.worker.Worker] explicitly using the constructor (new). You have to use one of the 'actorOf' factory methods to create a new actor. See the documentation.
at akka.actor.ActorInitializationException$.apply(Actor.scala:192)
at akka.actor.Actor$class.$init$(Actor.scala:467)
at akka.actor.AbstractActor.<init>(AbstractActor.scala:132)
at ir.dotin.alm.akka.worker.Worker.<init>(Worker.java:17)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:187)
at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:236)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:233)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:262)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84)
Comment commencer cet acteur-vous dans vos tests? Avez-vous vu la documentation Java sur les tests Akka Actor? http://doc.akka.io/docs/akka/current/java/testing.html – dvim
Je commence avec l'acteur de définition – morteza