クラスのSpockテストを作成しようとしましたが、ここでアクターにメッセージを送信することを確認する必要があります(たとえばstatActor
)。私はAkkaが統合テストのための特別なライブラリを持っていることを知っていますが、それは非常に簡単なテストのためにあまりにも多いようです。だから、私は試してみた:私はスポックが法tell
でモックを作成することを考えAkockのActorRef用のSpockモック
void startStats() {
Date x = null
// prepare some data, fill x with required value
this.statActor.tell(x)
}
:
setup:
def myActor = Mock(ActorRef)
myService.statActor = myActor
when:
myService.startStats()
then:
1 * myActor.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とのある種の非互換性?そのようなクラスのためのモックを作る方法はありますか? ActorRefを模擬する
"非常に簡単なテストではあまりにも多いようです。" - 私はこの結論がどのように行われたか、特にあなたが試したモックがうまくいかなかったことを考えてもよいでしょうか? –
@ViktorKlang 'def actor = Mock(ActorRef)'という行は 'testkit'に必要な行数がそれほど多くないからです。私はそれが他のオブジェクトのモックを作ることができることを意味し、細かく、実際に使用するのが簡単です。 –
@paradigmaticはい、わかります。おそらく私は厳しい質問をしていますが、私はここで何ができますか? : –