Tôi có Subscriber
trừu tượng lớp cơ sở sau đây:Làm cách nào để kiểm tra phương thức nhận của Người đăng ký trong Cụm Akka?
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")
}
}
Và tôi muốn thử nghiệm mà nó nhận được tin nhắn được công bố cho chủ đề mà một lớp con được đăng ký. Một số giả đơn giản mà chứng tỏ rằng là như sau:
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)
Cách duy nhất mà tôi biết để làm khẳng định về thông điệp mà diễn viên cụ thể nhận được là bằng cách TestProbe
, nhưng tôi không biết làm thế nào tôi có thể làm cho một TestProbe
mở rộng lớp học của tôi.
Thông thường, Akka docs có nhiều mã mẫu với các bộ thử nghiệm liên quan, nhưng tôi không thể tìm thấy bất kỳ nội dung nào trong tài liệu cụm Akka liên quan đến thử nghiệm phương pháp receive
.
Có ai có đề xuất không?
Một kludge là ghi đè 'nhận' và thay đổi biến thành viên khi tác nhân nhận được bất kỳ điều gì và xác nhận rằng biến thành viên được đặt trong thử nghiệm của tôi ... nhưng điều này là xấu. Tìm cách tiếp cận thử nghiệm thành ngữ hơn. – erip