假设我有一个Actor(OrderGenerator),它响应传入的消息(GenerateOrder),向另一个Order类型的Actor(OrderProcessor)发送消息。
case class Order(orderId: String, partNumber: String, orderQty: Int) // ...etc.
在OrderGenerator的用于GenerateOrder消息的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( ??????? ))
正如您所看到的,我不知道预期Order的完整细节是什么,因为orderId是由OrderGenerator在运行时生成的,而且我无法预测UUID将是什么。
在不知道详细信息(或仅知道其中一部分)的情况下,如何测试Order消息是否已发送?
1条答案
按热度按时间jhdbpxl91#
我知道这听起来可能有点“不安全的方法”(虽然我不认为还有其他选择),但是看一下docs of akka TestInbox,您可以使用这两个方法,并使用订单的其他字段作为Assert: