gpt4 book ai didi

scala - Spock mock Akka 的 ActorRef

转载 作者:行者123 更新时间:2023-12-03 03:46:09 24 4
gpt4 key购买 nike

我尝试为一个类进行 Spock 测试,我需要检查它是否向 actor 发送消息(例如 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 存在某种不兼容?有什么办法可以模拟这样的类(class)吗?

最佳答案

模拟 ActorRef 的唯一受支持的方法是创建 TestProbe:

// "system" is an ActorSystem
final TestProbe probe = TestProbe.apply(system);
final ActorRef mock = probe.ref;

没有比这更容易或更简单的了。

关于scala - Spock mock Akka 的 ActorRef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10868983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com