我有以下Subscriber抽象基类:
abstract class Subscriber(topics: Seq[String]) extends Actor with ActorLogging {
import DistributedPubSubMediator.{ Subscribe, SubscribeAck }
val mediator = DistributedPubSub(context.system).mediator
// subscribe to each topic
topics.foreach{mediator ! Subscribe(_, self)}
def receive = {
case SubscribeAck(Subscribe(name, None, `self`)) ⇒
log.info(s"Subscribing to $name")
}
}我想测试它是否接收发布到子类订阅的主题的消息。演示这一点的一些简单伪代码如下:
val topic = "foo"
class FooSubscriber extends Subscriber(Seq(topic))
val fooSubActor = system.actorOf(Props[FooSubscriber])
val mediator = DistributedPubSub(system).mediator
val msg = "This is a string"
// Publish the msg to the "foo" topic.
mediator ! Publish(topic, msg)
fooSubActor.expectMsg(msg)我所知道的对特定参与者接收的消息进行断言的唯一方法是通过TestProbe,但我不知道如何使TestProbe扩展我的类。
通常,Akka集群有大量带有相关测试套件的示例代码,但我在Akka docs文档中找不到任何与测试receive方法相关的内容。
有没有人有建议?
发布于 2017-01-05 03:21:47
这是一个教科书上的例子,说明了依赖注入对可测试性的帮助。
如果您在订阅者构造函数中接收DistPubSub的中介器,而不是直接请求它,那么您可以单独测试Suscriber参与者,而不需要使用DistPubSub作为测试装置的一部分。
https://stackoverflow.com/questions/41416269
复制相似问题