akka 2.3.13です
KillされたことをテストしたくなったのでググったらEventFilterなるものが出てきました。
Testing Actor Systems — Akka Documentation
なんとログを見て特定の例外ログが出ているかどうかを見るもののようです。ゴリ押してますね。 使い方は公式のとおりなので書くまでもないですが、下のように書けます。
import akka.testkit.EventFilter import com.typesafe.config.ConfigFactory implicit val system = ActorSystem("testsystem", ConfigFactory.parseString(""" akka.loggers = ["akka.testkit.TestEventListener"] """)) try { val actor = system.actorOf(Props.empty) EventFilter[ActorKilledException](occurrences = 1) intercept { actor ! Kill } } finally { shutdown(system) }
ログの設定を設定ファイルでやりたい時はtest/resources/application.conf
などでやればOKです。
TestProbeでも良い?
Killされたことがテストできたら最高だったのですが、よく考えたら止まっていることがわかればまあいい感じだと気づいたので
Testing Actor Systems — Akka Documentationにあるように
TestProbe
経由でTerminatedを観測してやれば良さそうでした。
val p = TestProbe()
probe watch target
target ! Kill
probe.expectTerminated(target)