模拟第三方服务(BrainTree) - Akka HTTP

时间:2018-04-11 07:57:41

标签: mocking akka braintree akka-http

我是Akka HTTP的新手,我遇到了下面的问题。 我想为调用第三方服务的路由编写一些测试。此服务提供JSON响应。我认为最好的解决方案是在我的应用程序中实现模拟服务器以提供适当的响应。 实现此功能的最佳方法是什么?

获取付款方式:

def getPaymentMethod(paymentMethodRequest: PaymentOptionRequest): (Boolean, PaymentOption) = {
    val result = gateway.paymentMethod().find(paymentMethodRequest.paymentMethodToken)

    (true, convertPaymentMethodToPaymentOption(result))
}

1 个答案:

答案 0 :(得分:0)

功能方法

据推测getPaymentMethod方法是在Route内调用的,类似于:

val route : Route = 
  get {
    val paymentMethodRequest = ???

    val (validPayment, methodOption) = getPaymentMethod(paymentMethodRequest)

    complete(???)
  }

使用“模拟服务器”测试route的一种可能方法是将路由重新组织为接收付款方式getter的高阶函数:

def createRoute(paymentMethodGetter : (PaymentOptionRequest) => (Boolean, PaymentOption)) : Route = 
  get {
    val paymentMethodRequest = ???

    val (validPayment, methodOption) = paymentMethodGetter(paymentMethodRequest)

    complete(???)
  }

使用新方法签名,您仍然可以在生产代码中创建一条路由到第三方:

val route = createRoute(getPaymentMethod _)

您可以在测试代码中创建一个返回文件数据的路径:

val dataFromTestFile = ???

//ignores the option request and reads data from a file
val mockServer : (PaymentOptionRequest) => (Boolean, PaymentOption) = 
  _ => (True, dataFromTestFile)

val route = createRoute(mockServer)

这将允许您使用存根数据测试路由逻辑的其余部分。