<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-testkit_2.13</artifactId>
<version>2.6.16</version>
<scope>test</scope>
</dependency>
ActorSystem system = ActorSystem.create();
ActorRef testedActor = system.actorOf(Props.create(MyActor.class));
TestProbe probe = new TestProbe(system);
testedActor.tell(new MyMessage(), probe.ref());
probe.expectMsgClass(TimeoutException.class);
import akka.actor.AbstractActor;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import akka.testkit.javadsl.TestKit;
import akka.testkit.javadsl.TestProbe;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import scala.concurrent.duration.Duration;
import java.util.concurrent.TimeUnit;
public class ExceptionHandlingTest {
static ActorSystem system;
@BeforeClass
public static void setup() {
system = ActorSystem.create();
}
@AfterClass
public static void teardown() {
TestKit.shutdownActorSystem(system);
system = null;
}
@Test
public void testExceptionHandling() {
new TestKit(system) {{
final Props props = Props.create(MyActor.class);
final ActorRef testedActor = system.actorOf(props);
final TestProbe probe = new TestProbe(system);
testedActor.tell(new MyMessage(), probe.ref());
probe.expectMsgClass(Duration.create(1, TimeUnit.SECONDS), TimeoutException.class);
}};
}
static class MyActor extends AbstractActor {
@Override
public Receive createReceive() {
return receiveBuilder()
.match(MyMessage.class, this::handleMessage)
.build();
}
private void handleMessage(MyMessage message) {
throw new TimeoutException("Timeout occurred");
}
}
static class MyMessage {}
}