如何在scala akka(spray)中为rest服务编写测试用例

Posted

技术标签:

【中文标题】如何在scala akka(spray)中为rest服务编写测试用例【英文标题】:how to write test case for rest service in scala akka(spray) 【发布时间】:2016-04-24 16:38:22 【问题描述】:

如何模拟 HttpRespose?我正在使用 scalla、akka 和 spray 来调用以 json 响应的 rest 服务,我需要为此编写测试用例。建议我可以使用的技术。

【问题讨论】:

【参考方案1】:

最好的选择是使用 Spray Test Kit http://spray.io/documentation/1.1.2/spray-testkit/ 带有预定义的方法,允许进行一些模拟。

如果您需要模拟底层库 Mockito 是一个不错的选择,但还有其他类似 Scalamock 的库,您可以尝试一下。

对于 JSON 检查,我在使用 spray 的 json 库和检查反序列化对象方面有很好的经验。

【讨论】:

【参考方案2】:

Mockito 对我来说仍然是最好的模拟工具(请参阅 http://site.mockito.org/)。它是为 java 编写的,但我发现它与 scala 配合得很好。另一个不错的是 easymock (http://easymock.org/)。

您还应该评估是否需要降低到模拟 HttpResponse 的水平,或者是否可以让您的测试在更高级别上运行。

【讨论】:

【参考方案3】:

我试着回答标题:

如何在 scala akka(spray) 中为 rest 服务编写测试用例

问题的详细描述好像有漏点...

值得一提的是,我们通常编写不同级别的测试,我建议如下:

对于单元测试(没有特定于actor)的模拟,有许多选项与我们在java 中的常见嫌疑人没有什么不同(Mockito、EasyMock、JMock)+ 一些特定于scala(如ScalaMock)。 Scalatest 为其中一些提供了糖包装,所以我会推荐它。 在集成测试级别我会提到akka-testkit,这是通过交换消息来验证参与者行为的最佳选择。此外,如上一个答案中提到的,还有spray-testkit,它使路由逻辑的测试变得容易。 对于服务/组件级别的测试(发送 http 请求并验证 http 响应),您可以使用任何常用的测试库,例如 Scalatest,或者使用更复杂的库来编写面向业务的测试,例如 cucumber。还有一些模拟/存根依赖项的选项,例如:mock-server、wiremock、stubby4j 实际上可以在任何语言中使用,但问题提到了 scala,因此 jvm 运行选项应该是更可取的。根据我的经验,mock-server 是这里最灵活的选择。

【讨论】:

以上是关于如何在scala akka(spray)中为rest服务编写测试用例的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AKKA-HTTP、spray-json、oauth2 和 slick 优化 scala REST api?

在 Play Framework 2.4 中为 Scala 实现 Akka

使用spray json的一点小经验

Spray / Sorm 给出参数类型不匹配

找不到密钥 akka 的配置设置

Android 上的 Akka 多参考.conf