クラスの Spock テストを作成しようとしましたが、アクターにメッセージを送信することを確認する必要があります (たとえばstatActor
)。Akka には統合テスト用の特別なライブラリがあることは知っていますが、非常に単純なテストには多すぎるようです。だから、私は試しました:
setup:
def myActor = Mock(ActorRef)
myService.statActor = myActor
when:
myService.startStats()
then:
1 * myActor.tell(_)
ターゲット メソッドは次のようになります。
void startStats() {
Date x = null
// prepare some data, fill x with required value
this.statActor.tell(x)
}
Spock はメソッドでモックを作成すると思いましたtell
。しかし、このテストを実行した後、私は得ています:
java.lang.ClassCastException: akka.actor.ActorRef$$EnhancerByCGLIB$$80b97938 cannot be cast to akka.actor.ScalaActorRef
at akka.actor.ActorRef.tell(ActorRef.scala:95)
at com.example.MyService.startStats(MyService.groovy:32)
なぜ実際のActorRef
実装を呼び出しているのですか? Scala との何らかの非互換性はありますか? そのようなクラスのモックを作成する方法はありますか?