问题标签 [akka-testkit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2776 浏览

scala - Akka:测试监控\死亡观察

在我的场景中,我有 2 个演员:

  1. watchee(我用TestProbe
  2. watcherWatcher包裹起来TestActorRef以暴露state我在测试中跟踪的一些内部)

watchee观察者在死亡时应该采取一些行动。

这是我到目前为止编写的完整测试用例:

现在,由于所有涉及的参与者都使用CallingThreadDispatcher(所有 Akka 的测试助手都是使用带有 的道具构建的.withDispatcher(CallingThreadDispatcher.Id)),我可以安全地假设当这个语句返回时:

...“开始”消息已经被处理WatchingActor,因此我可以根据watcher.underlyingActor.state

但是,根据我的观察,当我停止watchee使用system.stop或向Kill它发送消息时,作为死亡Terminated副作用产生的消息会在另一个线程中异步执行。watchee

不是解决方案是停止watchee,阻塞线程一段时间并Watcher在此之后验证状态,但我想知道如何以正确的方式做到这一点(即如何确保在杀死演员之后它的观察者收到并处理 Terminated消息表明它已经死亡)?

0 投票
1 回答
365 浏览

akka - 在 Akka TestKit 中创建 TestProbe 的时间

我在测试中具有覆盖 actorOf 的特征:

而且我有工人演员,当收到任何消息时会停止自我:

我还有主演员,他创建演员并将他们排在队列中:

而这个失败的测试:

在测试中的 Thread.sleep 之后,我通过“1 不等于 2”给出错误。我不知道发生了什么。但是,如果猜测我可以假设 TestProbe() 无法及时创建。我能做些什么?

0 投票
1 回答
255 浏览

akka - Akka FSM 和 TestKit 将共享测试放入 Trait 会使发件人死信

我正在尝试将一些常见 Akka FSM 代码的一些常见测试纳入一个特征,但senderref 正在变成deadLetters. 使用此 FSM 代码:

然后我可以使用重复的测试代码在两个规范中测试两个状态的通用代码:

当我尝试将常见的测试逻辑反应成一个特征时:

响应转到 deadLetters 演员:

发件人是 Actor[akka://default/deadLetters] [INFO] [11/30/2014 16:15:49.812] [default-akka.actor.default-dispatcher-2] [akka://default/deadLetters] 消息从 TestActor[akka://default/user/$$b] 到 Actor[akka://default/deadLetters] 的 [java.lang.String] 未交付。[1] 遇到死信。可以使用配置设置“akka.log-dead-letters”和“akka.log-dead-letters-during-shutdown”关闭或调整此日志记录。

我如何修复隐式发送者以确保当 FSM 演员从特征内响应测试 make 的调用时,它会返回到 testActor 以便expectMsg工作?

0 投票
0 回答
368 浏览

scala - 喷雾和演员非确定性测试

Helo,一开始我想为我的英语道歉:)

akka=2.3.6
spray=1.3.2
scalatest=2.2.1

我遇到了 teting 路由的奇怪行为,它在 handleWith 指令中询问演员,
我使用 handleWith 指令进行路由


和简单的演员 wchich 总是在接收对象数据时响应并且有自己的接收块包装在 LoggingReceive 中,所以当演员接收消息时我应该看到日志

我使用(我认为简单的代码)对其进行测试


和行为:
当我运行包中的所有测试(使用 Intellij Idea 14 Ultimate)或 sbt 测试时,我遇到相同的结果
一次执行 -> 所有测试都通过
,下一个 -> 不是全部通过,这不通过我可以看到:
1. 失败,因为请求在 X 秒内既没有完成也没有被拒绝( X up tp 60)
2. 系统控制台输出来自线路 post(handleWith { (data: Data) =>{ println("receiving data"), so code在 handleWith 中执行
3. 从路由代码中询问超时异常,但并不总是(在失败的测试中)
4. 演员 LoggingReceive 没有日志,所以演员没有机会响应
5. 当我重新运行测试时,结果甚至与以前不同

线程有问题吗?或测试模块,库内的线程阻塞?还是别的什么?我不知道为什么它不起作用:(

0 投票
3 回答
1096 浏览

scala - 子演员终止验证

我有以下演员层次结构父 - > 孩子 - > 工人,其中孩子的生活范围很紧张 - 当请求完成时,孩子演员应该被终止。我想作为测试的一部分进行验证。我创建 StepParent 作为测试目的,因为我想验证给定请求的响应,该响应转发到 msg 到 testprobe。

我的测试如下所示:

由于最后一次检查预期消息,我的测试失败了:

根据详细日志 Terminated msg 也被转发(根据最后一行)

我真的不明白为什么最后一次expectedMsg 检查在这里不起作用,因为消息像往常一样转发。自动收到的消息有什么特殊处理吗?

有人可以请带一些棚子吗?

谢谢

更新:尝试按照建议解决该问题 - 删除包装信封,如下所示:

它仍然失败,似乎这里发生了一些可疑的事情:

这不是来自 StepParent 的正确消息,但它以某种方式被提取。

0 投票
1 回答
1346 浏览

scala - 将 ByteString 写入文件导致 NullPointerException

我有一个 Akka 演员,它以大约 1500 字节的块读取文件的内容。当 Actor 收到NextBlock消息时,它会使用包装在 ByteString 中的下一个数据块进行回复。几个非常简单的测试和人工目测数据表明演员工作正常。我正在使用 Scala 2.11.5、Akka 2.3.9、ScalaTest 2.2.1 和 SBT 0.13.5。

我在设置更大的测试时遇到问题。我想将大约 10kB 左右的测试模式数据写入文件,然后验证 Actor 的输出是否符合我的预期。我正在通过 ByteStringBuilder 创建测试模式。当我将测试数据写入文件时,我得到了 NullPointerExceptions。这是显示该问题的测试的条带化版本的代码:

我尝试了很多不同的方法来解决这个问题

  • 将 ByteString 转换为 ByteBuffer 并通过 ByteChannel 写入(如上所示)
  • 将 ByteString 的各个字节写入 BufferedOutputStream
  • 将 ByteString 转换为 Array[Byte] 并通过 BufferedOutputStream 写入

无论我尝试什么,我都会以类似的方式结束

有人知道我做错了什么吗?

我在github上放了一个示例项目

0 投票
1 回答
4707 浏览

scala - 有没有办法重新启动 akka 演员

有没有办法重新启动演员?我正在编写一个测试来测试我的参与者系统结构中的恢复策略,但我找不到如何重新启动参与者来测试我自定义的 preRestart/postRestart 生命周期挂钩的方法。使用默认 supervisorStrategy - OneForOne 与默认决策者。我尝试使用 Killed 但默认策略被翻译为停止演员。压倒一切的策略意味着我将实际测试与实际在生产代码中运行的不同的东西。

我是否错过了一些重要的事情,因为我认为不仅将快乐的一天场景作为测试的一个组成部分进行了测试。

感谢您的澄清

尝试以下但无法制作:

在通过这个失败演员的测试中:

其中 AddressService acctor 定义如下:

但仍然收到未处理的“失败”消息

0 投票
0 回答
89 浏览

scala - 可堆叠特征模式不起作用 - 无法修改演员的接收方法

我有一个演员层次结构,我想测试错误场景 - 实际上测试应用的主管策略。我需要修改演员的接收方法 - 让演员失败的消息。我找到了一个可堆叠的特征模式,但无法使其工作。我的代码如下:

在通过这个失败演员的测试中:

其中 AddressService acctor 定义如下:

但是仍然没有处理“失败”消息。有什么提示吗?

0 投票
1 回答
523 浏览

scala - 如何在测试类中为具有构造函数参数的 Actor 创建一个 TestActorRef?

如何在测试类中创建 TestActorRef。具体来说,我有以下测试设置......

...当我运行测试时,一切都通过了,但是在关闭 ActorSystem 后,我得到了这个很长的错误跟踪......

我遇到了这个先前的问题,但在这种情况下,接受的答案对我不起作用。

如果它是相关的,这里是DoubleAuctionMarket演员的定义......

0 投票
1 回答
1257 浏览

scala - 如何忽略 testKit 中的单个测试

我在同一个类中有一系列测试都在测试相同的特性,我怎样才能跳过/忽略一个,例如:

我确实使用registerIgnoredTest("test to be ignored")过,但我必须删除in. 有更优雅的解决方案吗?喜欢注释