加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Akka演员单元测试与Scala

发布时间:2020-12-16 19:01:56 所属栏目:安全 来源:网络整理
导读:我对 Scala很新,所以请温柔. 在我正在构建的应用程序中,我正在使用Akka演员,我想编写一些单元测试.我遇到这个official documentation for writing unit tests for Akka actors 但是我不明白它应该如何工作.尤其是, val actorRef = TestActorRef(new MyActor)
我对 Scala很新,所以请温柔.

在我正在构建的应用程序中,我正在使用Akka演员,我想编写一些单元测试.我遇到这个official documentation for writing unit tests for Akka actors

但是我不明白它应该如何工作.尤其是,

val actorRef = TestActorRef(new MyActor)
// hypothetical message stimulating a '42' answer
val future = actorRef ? Say42
val Success(result: Int) = future.value.get
result must be(42)

当我尝试,我找不到:价值成功,这并不奇怪.

然后我发现this example of how to test Scala actors

val actorRef = TestActorRef[TickTock]

implicit val timeout = Timeout(5 seconds)
val future = (actorRef ? new Tick("msg")).mapTo[String]
val result = Await.result(future,timeout.duration)

Assert.assertEquals("processed the tick message",result)

,这确实可能是老的,但是当我想要使用期货,最重要的是作品,它很容易理解,更接近我通常使用的东西.它需要我声明一些像ActorSystem这样的暗示,超时等等,这似乎不是正式的方式…

如果可能,我想使用官方文档提出的方法,所以如果有人可以帮助我了解它的工作原理(特别是成功)以及如何使用它,我将不胜感激.

解决方法

你的问题的答案可能太长了,因为不可能知道你实际知道的Scala多少.我会尽量让我的答案尽可能短,但是请随时要求澄清.我也代表整个stackoverflow社区道歉,让您感到需要道歉,因为在提出问题之前显然缺乏技能.

在Scala 2.10中引入了一个Try的概念.它与选项非常相似.选项是处理null的概念.类型Option的值可以采用两种形式:Some(value)或None.当您有可选值时,您可以对其进行模式匹配,以查看它是否为Some或否,然后相应地执行.模式匹配发生在Scala的许多地方,其中一个是在vals的初始化期间.以下是几个例子:

val x = 10 // pattern 'x' on the LHS matches any value on the RHS so 'x' is initialized with 10
val Some(x) = Some(10) // pattern 'Some(x)' on the LHS matches any value of type 'Some' and binds it's value to x,so 'x' is yet again initialized with 10

尝试是处理异常的概念.类型Try的值可以采用两种形式:Success(result)或Failure(throwable).当你有一个类型的值尝试你可以模式匹配它,看看它是一个成功或失败.

这是您的代码(成功中的模式匹配)发生的情况.与Option相反,默认情况下,Try的两种形式不在范围内,这会导致编译错误.这将修复它:

import scala.util.{Try,Success,Failure}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读