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

     2023-02-19     120

关键词:

【中文标题】如何在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 是这里最灵活的选择。

【讨论】:

如何让 Shiro 在 Scala + Akka + Spray 环境中工作

】如何让Shiro在Scala+Akka+Spray环境中工作【英文标题】:HowcanimakeShiroworkinScala+Akka+Sprayenvironment【发布时间】:2013-07-2209:25:57【问题描述】:我想我没有正确理解工作流程。我正在使用ApacheShiro和Stormpath在Scala中编写Web服务。我的用... 查看详情

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

】如何使用AKKA-HTTP、spray-json、oauth2和slick优化scalaRESTapi?【英文标题】:HowtooptimizescalaRESTapiusingAKKA-HTTP,spray-json,oauth2andslick?【发布时间】:2017-01-3111:11:31【问题描述】:我使用AKKA-HTTP、spray-json和Slick在scala中创建了一个RESTapi。对... 查看详情

在 Play Framework 2.4 中为 Scala 实现 Akka

】在PlayFramework2.4中为Scala实现Akka【英文标题】:ImplementingAkkainPlayFramework2.4forScala【发布时间】:2015-10-2010:06:13【问题描述】:我正在尝试复制IntegratingwithAkka,Play2.4forScaladoc中提出的基本示例。但是我很难将最后的部分放在一起...... 查看详情

Akka演员(Scala)如何在内存不足时获得堆转储[重复]

】Akka演员(Scala)如何在内存不足时获得堆转储[重复]【英文标题】:Akkaactors(Scala)Howtogetheapdumponoutofmemory[duplicate]【发布时间】:2016-11-0905:37:49【问题描述】:如何配置Akka应用程序以在崩溃时生成堆转储(内存不足)。尝试搜索... 查看详情

找不到密钥 akka 的配置设置

...:2015-04-0613:11:48【问题描述】:我在我的一个项目中使用scala、spray和akka。在Intellij中,它运行良好。当我构建项目并尝试在命令行中运行它时,出现以下错误。Causedby:com.typesafe.config.ConfigException$Missing:Nocon 查看详情

Scala如何使用akka actor有效地处理超时操作

】Scala如何使用akkaactor有效地处理超时操作【英文标题】:Scalahowtouseakkaactorstohandleatimingoutoperationefficiently【发布时间】:2013-07-1111:46:53【问题描述】:我目前正在使用Rhino在一个安静的服务中评估javascript脚本。我希望有一个评估... 查看详情

如何在 Scala Akka 中停止 system.scheduler.schedule

】如何在ScalaAkka中停止system.scheduler.schedule【英文标题】:Howtostopasystem.scheduler.scheduleinScalaAkka【发布时间】:2021-11-1503:27:45【问题描述】:我目前有一个方法可以创建一个调度程序,以设定的时间间隔向我的演员发送消息。但是... 查看详情

如何使用 scala 2.9.x 运行 akka 2.1-snapshots?

】如何使用scala2.9.x运行akka2.1-snapshots?【英文标题】:Howcanrunakka2.1-snapshotswithscala2.9.x?【发布时间】:2012-07-2420:32:36【问题描述】:当将akka从1.2升级到akka2.0.2时,我无法实现camel,因为akka2.0.2不支持akka-camel,我尝试使用akka2.1-snap... 查看详情

如何理解 AKKA 中使用的这种 CCAS 锁定机制?

】如何理解AKKA中使用的这种CCAS锁定机制?【英文标题】:HowtounderstandthisCCASlockingmachanizionusedinAKKA?【发布时间】:2011-09-0516:01:55【问题描述】:我刚刚在akka中遇到了一段代码。https://codereview.scala-lang.org/fisheye/browse/~raw,r=25521/scala-... 查看详情

如何使用 scala 和 json spray 将混合类型值的 json 转换为 json

】如何使用scala和jsonspray将混合类型值的json转换为json【英文标题】:howdoiconvertjsonwithmixedtypevaluestojsonwithscalaandjsonspray【发布时间】:2013-12-0406:17:11【问题描述】:我尝试了jsonspray的教程,但我有一个不同的字符串,其中一个值... 查看详情

使用 Scala/Akka 在 JVM 中进行高频交易

】使用Scala/Akka在JVM中进行高频交易【英文标题】:HighFrequencyTradingintheJVMwithScala/Akka【发布时间】:2012-04-1415:24:23【问题描述】:让我们想象一个Java中的假设HFT系统,需要(非常)低延迟,由于不变性(Scala?),有许多短命的... 查看详情

如何在 Scala 中为未来添加截止日期?

】如何在Scala中为未来添加截止日期?【英文标题】:HowtoaddadeadlinetoafutureinScala?【发布时间】:2021-07-0604:39:15【问题描述】:假设我有一个函数fab:A=>Future[B]并希望它返回一个在截止日期之前完成的新未来。所以我正在写一... 查看详情

Android 上的 Akka 多参考.conf

...:我正在尝试将akka和spray添加到我的android应用程序(用Scala和Scalaidlib编写)。一切都应该正常,我的ide没有抛出任何错误。我发现一些链接解决了同样的问题,但到目前为止没有任何帮助。当我构建我的项目时:sbt~andro 查看详情

scala框架akka学习(代码片段)

...Actor的关系Akka模型介绍Actor模型的优点Akka模型的核心概念如何创建Actor添加依赖在Akka中,Actor负责通信,在Actor中有一些重要的生命周期方法**akka的架构原理**创建Actor的步骤receive方法介绍ActorSystemactorOf方法actorOf方法的参... 查看详情

Scala,spray-json:通用枚举 json 格式

】Scala,spray-json:通用枚举json格式【英文标题】:Scala,spray-json:universalenumerationjsonformatting【发布时间】:2018-03-1815:22:36【问题描述】:我有这样的模型:两个枚举和一个案例类,其中包含这些枚举类型的两个字段://seelater,whyobj... 查看详情

如何在 spark scala 中为单列创建数据框

】如何在sparkscala中为单列创建数据框【英文标题】:HowtoCreateDataframeinsparkscalaforsinglecoumn【发布时间】:2017-05-1816:14:51【问题描述】:我是sparkscala的新手。我有包含10列的数据框,但我想为该数据框再添加一列,该列是日期格式... 查看详情

如何在 scala 中为 collat​​z 链改进 tailrec 函数的执行时间

】如何在scala中为collat​​z链改进tailrec函数的执行时间【英文标题】:howcanIimprovetheexecutiontimeofmytailrecfunctioninscalaforcollatzchain【发布时间】:2021-08-0202:47:02【问题描述】:defcollatzChainLength(n:Int):Int=@tailrecdefcollatz(n:Int,acc:Int):Int=if 查看详情

在线程“main”中获取akka流代码时出错,异常java.lang.noclassdeffounderror:scala/function1$class

当我运行akka流代码时,我遇到了Java错误:**线程“主”中的异常java.lang.NoClassDefFoundError:scala/Function1$class在akka.stream.Supervision$$anon$1。(Supervision.scala:57)在akka.stream.Supervision$。(Supervision.scala:57)在akka.stre 查看详情