Akka Typed测试-在不知道消息详细信息的情况下预期类型的消息



假设我有一个Actor(OrderGenerator(,它响应传入的消息(GenerateOrder(,将消息发送给另一个Order类型的Actor(OrderProcessor(。

case class Order(orderId: String, partNumber: String, orderQty: Int) // ...etc.

在GenerateOrder消息的OrderGenerator的receiveMessage((方法中,我们创建了一个Order对象。此时会生成orderId值(假设它是动态生成的UUID(。然后,它将此Order作为消息发送给OrderProcessor Actor。

Behaviors.receiveMessage {
case GenerateOrder(partNumber: String, orderQty: Int) =>
val newOrder = Order(orderId=GenerateUUID(), partNumber=partNumber, orderQty=orderQty)
orderProcessor ! newOrder
Behaviors.same

好的,现在我想测试一下。

val inbox = TestInbox[Order]()
val TestKit = BehaviorTestKit(OrderGenerator(orderProcessor=inbox.ref))
testKit.run(GenerateOrder(partNo="widgetX", orderQty=5))
inbox.expectMessage(Order( ??????? ))

正如你所看到的,我不知道预期订单的全部细节是什么,因为orderId是由OrderGenerator在运行时生成的,我无法预测UUID会是什么

在不知道详细信息(或只知道其中一些(的情况下,如何测试订单消息是否已发送?

我知道这听起来可能有点像";不安全方法";(不过我不认为有任何其他选择(,但只要看看akka TestInbox的文档,你就可以使用这两种方法,并使用订单的其他字段作为断言:

assert(inbox.hasMessages())
val message = inbox.receiveMessage()
assert(message.isInstanceOf[Order]) // or essentially any other comparison, like message.partNo == "widgetX"

相关内容

最新更新