【发布时间】:2020-11-02 23:27:18
【问题描述】:
在我的应用中,我有一个 CartActor 管理购物车,而 OrderManager 监督整个购物过程:
object CartActor {
sealed trait Command
case class AddItem(item: Any) extends Command
case class RemoveItem(item: Any) extends Command
case object ExpireCart extends Command
case object StartCheckout extends Command
case object ConfirmCheckoutCancelled extends Command
case object ConfirmCheckoutClosed extends Command
case object GetItems extends Command // command made to make testing easier
sealed trait Event
case class CheckoutStarted(checkoutRef: ActorRef) extends Event
def props() = Props(new CartActor())
}
object OrderManager {
sealed trait Command
case class AddItem(id: String) extends Command
case class RemoveItem(id: String) extends Command
case class SelectDeliveryAndPaymentMethod(delivery: String, payment: String) extends Command
case object Buy extends Command
case object Pay extends Command
case class ConfirmCheckoutStarted(checkoutRef: ActorRef) extends Command
case class ConfirmPaymentStarted(paymentRef: ActorRef) extends Command
case object ConfirmPaymentReceived extends Command
sealed trait Ack
case object Done extends Ack //trivial ACK
}
OrderManager 从 CartActor 接收 OrderManager.ConfirmCheckoutStarted(checkoutRef: ActorRef)。我必须编写单元测试来检查。我想做:
it should "start checkout" in {
val cart = TestActorRef[CartActor]
cart ! AddItem("Item")
cart ! StartCheckout
expectMsg(OrderManager.ConfirmCheckoutStarted)
}
但我收到一个错误:assertion failed: expected ConfirmCheckoutStarted, found ConfirmCheckoutStarted(Actor[akka://CartTest/user/$$d/checkout#-1922766677])。我看到问题在于括号中有一个参数。我该如何测试呢?我不关心里面的actorRef,我只想要ConfirmCheckoutStarted。
【问题讨论】:
-
将
checkoutRef: ActorRef包裹在Option中并检查ConfirmCheckoutStarted(Some(_)) -
@Felipe 这是大学作业,我不能更改它。我只需要为这些类编写测试。