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

how to write test case for rest service in scala akka(spray)

如何模拟HttpRespose?我正在使用带有 spray 的 scalla、akka 来调用以 json 响应的休息服务,我需要为此编写测试用例。推荐我可以使用的技术。

Mockito 对我来说仍然是最好的 mock-utility(参见 http://site.mockito.org/). It's written for and in java, but I find it works very well with scala. Another good one is easymock (http://easymock.org/)。

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

最好的选择是使用 喷雾测试套件 http://spray.io/documentation/1.1.2/spray-testkit/ 带有预定义的方法,允许进行一些模拟。

如果你需要模拟底层库 Mockito 是一个很好的选择,但还有其他像 Scalamock 你可以试试。

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

我试着回答标题:

how to write test case for rest service in scala akka(spray)

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

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

  • 用于单元测试(没有演员特定)模拟有许多选项与我们在 java 中的通常怀疑没有什么不同(Mockito, EasyMock, JMock) + some scala specific (like ScalaMock). Scalatest 为其中一些提供了糖包装所以我会推荐它.
  • 在集成测试级别我会提到 akka-testkit which is the best option to verify actors behaviour by exchanging messages. Also as mentioned in previous answer there is spray-testkit 这使得路由逻辑的测试变得容易。
  • 对于 service/component 级测试(发送 http 请求并验证 http 响应),您可以使用任何常用的测试库,例如 Scalatest,或者使用更复杂的测试库来编写面向业务的测试,例如 cucumber. There are also some options to mock/stub dependencies like: mock-server, wiremock, stubby4j 实际上可以在任何语言中使用,但问题提到了 scala,所以 jvm 运行 选项应该更可取。根据我的经验,mock-server 是这里最灵活的选项。