问题标签 [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.
scala - 使用 Akka TestProbe 进行喷涂路线测试
在我的 Spray 路线中,我委托一个 actor 来处理请求。将RequestContext
在消息中发送给该参与者。
在我的测试中,我用 aTestProbe
代替了 actor,因为 actor 的处理成本很高。
此规范失败,因为没有status
. TestProbe 什么都不做,因此ctx
从未响应。
该行status mustEqual StatusCodes.Success
对我的测试并不重要,但我无法删除它,因为那时规范无法编译 - 该方法不再类型检查为MatchResult
.
如何测试委托给演员的路线?
scala - 如何测试向另一个 Actor 发送消息的 Akka Actor?
我正在使用带有 Akka TestKit 的 ScalaTest 来为我编写的演员编写单元和集成测试,以便在不改变任何内部状态的情况下简单地向另一个演员发送消息。以此为例:
我想编写一个测试来确认由于anotherActor
处理AnotherMessage
而MyActor
处理MyMessage
。经典示例是用于TestActorRef
获取底层参与者并检查一些在收到消息时应该受到影响的内部状态,如下所示:
但就我而言,我不在乎这种状态。事实上,我想避免持有任何这样的状态。TestProbe
也不是我想要的,因为您仍然需要向TestProbe.ref
被测演员注册。在大多数情况下,我查看了 Akka 测试文档 ( http://doc.akka.io/docs/akka/snapshot/scala/testing.html ) 中的所有示例,但没有找到任何合适的。
akka - 如果发送了预期的消息,Akka 的 TestProbe expectMsg 将匹配
我对特定演员进行了测试。这个actor依赖于其他一些actor,所以我用来TestProbe()
单独测试。我的问题是,我收到更多消息,然后我有兴趣在这个非常特殊的测试中进行测试。例如:
测试失败,因为在创建 MyActor 时,它会向构造函数中传递的消息发送某种“注册”消息。
消息3
最终到达,但断言失败——这不是第一个到达的消息。我想避免断言比测试所需更多的消息 - 这些消息可能会改变,等等,无论如何它不是特定测试的范围。
由于TestProbe
不包含此类方法 - 我怀疑我的测试设置(或者更确切地说是我的项目架构)可能有问题。我看到有很多方法,fishForMessage
但所有这些方法都需要一个明确的时间参数,这似乎无关紧要,因为我的整个测试是纯粹同步的。
有没有什么方法可以完成这样的测试,希望的消息只是在所有收到的消息中?如果没有,如何改进我的设置以易于测试?
java - 在 Akka 中对私有方法进行单元测试
我是akka的新手,我正在java上尝试akka。我想了解演员内部业务逻辑的单元测试。我阅读了文档,演员中孤立的业务逻辑的唯一例子是:
虽然这很简单,但这意味着我要测试的方法是公开的。但是,考虑到参与者应该只通过消息进行通信,我的理解是没有理由拥有公共方法,所以我将我的方法设为私有。如下例所示:
所以要测试方法parse
我要么:
- 需要它使包私有
- 或者测试演员的公共接口,即下一个演员
LogWriter
从我的演员那里收到正确的解析消息LogRowParser
我的问题:
- 选项#1 有什么缺点吗?假设参与者仅通过消息进行通信,封装和干净的开放接口就不那么重要了吗?
- 如果我尝试使用选项#2,有没有办法在下游测试中捕获从参与者发送的消息(测试
LogRowParser
和捕获LogWriter
)?我查看了各种示例,JavaTestKit
但所有示例都捕获了返回给发件人的响应消息,并且没有一个显示如何拦截发送给新参与者的消息。 - 我还有其他选择吗?
谢谢!
UPD: 忘了提到我还考虑了以下选项:
- 将逻辑从actors中完全移到辅助类中。akka 是常见的做法吗?
- Powermock ......但如果可以重新设计,我会尽量避免它
scala - 如何在 scala.testkit.eventfilter 中拦截来自不同 ActorSystem 的日志?
我有一个 Scala 类ComponentBuilder
,它处理创建演员和初始化他们。它有一个system
对应于ActorSystem
(除其他外)的字段。
现在,我想使用TestKit
- 拦截参与者生成的日志并检查它们来测试它。如果我尝试使用常规EventFilter
,我可以看到我的演员在标准输出中产生的日志,但EventFilter
没有捕捉到它们,我猜是因为它们在不同的ActorSystem
.
我想到的一个解决方案是创建ComponentBuilder
一个子类ActorSystem
并将所有AS
-commands 传递给它的字段。由于返回的受保护方法,我没有设法做到这一点InternalActorRef
,但无论如何我不确定它是否会起作用,因为无论如何都会有2个演员系统。
我还尝试将一些消息从测试类传递给演员,然后等待并检查结果。这导致回复deadLetters
,可能出于相同的原因 - 内部ActorSystem
不知道外部的。
我将不胜感激您可能拥有的任何解决方案。
scala - 死信的 Akka 测试
如何在测试时对 Akka 中的死信作出断言?我有一个演员可以切换行为(使用become
)并处理使用单独的调度程序调度的一些期货。在某些特定情况下,它应该简单地拒绝其他消息。那些正确地去死信,但我想尝试为他们断言(或缺乏)。我怎样才能做到这一点?
scala - TestActorRef 中的 context.parent 值是什么?
我在 Scala/Akka 有一个小测试
它产生的输出是
为什么演员内部不是我们在日志中看到context.parent
的真正的父母?testActor1
(这是我希望在创建主题时成为父母的演员)。
如果这种物质状态是预期的——如果是这样,为什么?我认为这种方法没有任何好处。
scala - 播放 - Akka:演员测试
我读过 Akka 提供的 TestKit、TestActorRef 和 ImplicitSender。但是我没有找到一种方法来检查某个演员是否收到了某个消息。我认为如果接收者执行“发送者!Foo”,“expectMsg(Foo)”会很有用。但我的应用程序不同:我有一个演员 A 向另一个演员 B 发送消息。比 B 通过 WebSocket 向 Java 客户端发送消息。当 B 收到回复时,它会转发给参与者 C。如何检查 C 是否收到了该消息(可能在某个超时内)?谢谢。
scala - 测试参与者:恰好收到 N 条消息
我正在使用 Akka 演员测试一个应用程序。我正在使用测试探针。我想验证探针是否接收到 10 条相同类型的消息。一种解决方案可能是写 10 次:
但我更喜欢更通用的解决方案(例如,我也会针对 n=100 测试我的应用程序)。我也试过 probe.receiveN(10, 20 seconds) 但如果我收到超过 10 个元素,测试不会失败。相反,我希望它在这种情况下失败。有解决办法吗?
scala - 如何使用 ScalaTest 在 Akka Actor 中使用外部调用进行模拟
我是整个生态系统的新手,包括Scala
,Akka
和ScalaTest
我正在解决我Actor
调用外部系统的问题。
这LogReaderDisruptor main(Array())
是一个Java
可以做很多其他事情的类。
我目前的测试看起来像
UnitTestSpec
看起来像哪里(并从这里获得灵感)
问题
- 如何模拟调用
LogReaderDisruptor main(Array())
并验证它是否被调用?
我来自Java
, JUnit
,Mockito
土地,我会在这里做的事情是
我不确定如何在这里用 ScalaTest 翻译它。
另外,这段代码可能不是惯用的,因为我很新并且正在学习