从AsyncOne-ScalaZ中提取值

从AsyncOne-ScalaZ中提取值,scala,asynchronous,future,scalaz,concurrent.futures,Scala,Asynchronous,Future,Scalaz,Concurrent.futures,我在ScalaZ和Scala都是新手,所以我面临以下问题。 我为我的应用程序编写了一些单元测试,我需要的是提取实际响应的值 你能告诉我怎么做吗 Expected :PaymentResponse(7bc2dc3b-c347-422f-b204-ccefb22708fa, 7bc2dc3b-c347-422f-b204-ccefb22708fa,USD,15.9,PAYMENT_PENDING,Paypal,VISA,None) Actual

我在ScalaZ和Scala都是新手,所以我面临以下问题。 我为我的应用程序编写了一些单元测试,我需要的是提取实际响应的值

你能告诉我怎么做吗

Expected :PaymentResponse(7bc2dc3b-c347-422f-b204-ccefb22708fa,
                          7bc2dc3b-c347-422f-b204-ccefb22708fa,USD,15.9,PAYMENT_PENDING,Paypal,VISA,None)
Actual   :\/-(EitherT(Future(Success(\/-(PaymentResponse(7bc2dc3b-c347-422f-b204-ccefb22708fa,
               7bc2dc3b-c347-422f-b204-ccefb22708fa,
               USD,15.9,PAYMENT_PENDING,Paypal,VISA,None))))))
整个测试:

"should return a payment object" in {
  val paymentId = UUID.randomUUID()
  val a: AsyncEither[FinanceGatewayError, PaymentResponse] = paymentService.getPayment(ProfileId("profileId"), paymentId.toString)

  val expectedPaymentResponse = PaymentResponse(
    paymentId = paymentId.toString,
    orderId = paymentId.toString,
    currency = "USD",
    amount = 15.90,
    status = PAYMENT_PENDING,
    paymentMethodLabel = "Paypal",
    paymentMethodIssuer = VISA,
    threeDSecure = None
  )
  \/-(paymentService.getPayment(ProfileId("profileId"), paymentId.toString)) shouldBe expectedPaymentResponse
}

最后,这是我的正确方法

"should return a payment object" in {
  val paymentId = UUID.randomUUID()
  val expectedPaymentResponse = PaymentResponse(
    paymentId = paymentId.toString,
    orderId = paymentId.toString,
    currency = "USD",
    amount = 15.90,
    status = PAYMENT_PENDING,
    paymentMethodLabel = "Paypal",
    paymentMethodIssuer = VISA,
    threeDSecure = None
  )
  val paymentResponse: AsyncEither[FinanceGatewayError, PaymentResponse] =
    paymentService.getPayment(ProfileId("profileId"), paymentId.toString)
  Await
    .result(paymentResponse.run, 5 seconds)
    .fold(
      error => fail(s"The test is failed because $error ."),
      payment => payment shouldBe expectedPaymentResponse
    )
}

你不能把你的预期反应包装成
\/-(EitherT(Future)(Success(\/-)(…)
?不,这不是一个选项。你能提供你的导入语句和类定义吗?我很难确定哪个库,例如,
来自哪个库。@Astrid你似乎不需要
val a=…
,因为它没有在任何地方使用。@Astrid我只是用我的实现添加了一个答案。仅供参考,我不需要它推荐使用
Await.result
,因为它会阻塞线程。Scalatest有几个选项用于处理
Future
s,这些选项可以并行运行-我在下面的回答中介绍了它们:。